如何从另一个类引用在MainWindow中创建的类实例

时间:2013-02-09 04:46:32

标签: c# mvvm scope

我对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#很新。谢谢你的帮助。

詹姆斯

2 个答案:

答案 0 :(得分: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; }
}

这是一个更清洁,并且不会强制在主方法中操纵Cabbage

答案 1 :(得分:0)

您可以将卷心菜对象作为参数传递:

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);
    }
相关问题