我对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#很新。谢谢你的帮助。
詹姆斯
答案 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);
}