1

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

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# 很陌生。谢谢你的帮助。

詹姆士

4

2 回答 2

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; }
    }
}

但是,老实说,我根本不关心在您的主要方法中对 Cabbage 的操作。您可以改为在构造函数中传入所需的叶子数量,并允许视图模型自行处理。

在主要...

var myModelView = new ModelView(99);

在你的视图模型中

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

    public Cabbage Cabbage { get; set; }
}

这有点干净,不会在您的主要方法中强制操作 Cabbage

于 2013-02-09T05:03:04.907 回答
0

您可以将 cabbage 对象作为参数传递:

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);
    }
于 2013-02-09T05:00:40.257 回答