2013-02-09 64 views
1

我对Scope有一个初学者的问题。在MainWindow类中,我创建了用于数据绑定的ModelView类的实例,以及具有我要显示的Leaves属性的Cabbage类的实例。我的问题是如何从updateCabbageLeaves方法引用myCabbage.Leaves?我如何参考在另一个类的MainWindow中创建的类实例

namespace TestScope 
{ 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     ModelView myModelView = new ModelView(); 
     Cabbage myCabbage = new Cabbage(); 
     myCabbage.Leaves = 99; 
     myModelView.updateCabbageLeaves(); 
    } 
} 

class ModelView 
{ 
    public int CabbageLeaves { get; set; } 

    public void updateCabbageLeaves() 
    { 
     //CabbageLeaves = myCabbage.Leaves; 
    } 
} 

class Cabbage 
{ 
    public int Leaves { get; set; } 
} 

} 

我想这是不成立一个MVVM的方式。我的推理是:对于MVVM,我需要一个模型类和一个模型视图类。应用程序从MainWindow类开始,所以我在那里创建了模型和模型视图类的实例。

我对C#相当陌生。谢谢你的帮助。

詹姆斯

回答

3

你的关系的角度看是不完全正确。你真正想要做的是在你的视图模型中创建Cabbage模型本身的一个实例,将它传入并在那里映射和操作。

注意:您的课程也应公开。你必须指定这个。

namespace TestScope 
{ 

    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      ModelView myModelView = new ModelView(); 
      Cabbage myCabbage = new Cabbage(); 
      myCabbage.Leaves = 99; 
      myModelView.updateCabbageLeaves(myCabbage); 
     } 
    } 

    public class ModelView 
    { 
     public Cabbage Cabbage { get; set; } 

     public void updateCabbageLeaves(Cabbage myCabbage) 
     { 
      Cabbage = myCabbage.Leaves; 
     } 
    } 

    public class Cabbage 
    { 
     public int Leaves { get; set; } 
    } 
} 

说实话,我根本不在乎你在主要方法中操作卷心菜。您可以在构造函数中传递所需的叶子数量,并允许视图模型自行处理。

在主...

var myModelView = new ModelView(99); 

并在您的视图模型

public class ModelView 
{ 
    public ModelView(int numberOfLeaves) 
    { 
     Cabbage = new Cabbage(){ Leaves = numberOfLeaves } 
    } 

    public Cabbage Cabbage { get; set; } 
} 

这是一个小更清洁,不会强制白菜的操纵你的主要方法

+0

+1第二个例子。 – 2013-02-09 06:08:10

+0

谢谢,关于传递对象和创建本地实例的建议非常有用。下半场你是对的 - 我的代码看起来并不像这样 - 我只是想创建一个最简单的例子来说明我的问题! :) – 2013-02-09 10:50:45

+0

很高兴帮助:)。我只是想提供最好的模式。祝您在班级中好运! – 2013-02-09 14:23:19

0

您可以通过白菜对象作为arguement:

public void updateCabbageLeaves(Cabbage myCabbage) 
    { 
     this.CabbageLeaves = myCabbage.Leaves; 
    } 

public MainWindow() 
    { 
     InitializeComponent(); 

     ModelView myModelView = new ModelView(); 
     Cabbage myCabbage = new Cabbage(); 
     myCabbage.Leaves = 99; 
     myModelView.updateCabbageLeaves(myCabbage); 
    } 
相关问题