遵循这个模式:
这部分是您的模型类应该是什么样子,即使您使用实体框架来创建您的模型,它们也会继承 INPC.. 所以一切都很好。
public class Model_A : INotifyPropertyChanged
{
// list of properties...
public string FirstName {get; set;}
public string LastName {get; set;}
// etc...
}
每个视图模型都是要查看的信息的子集,因此您可以为同一个模型类拥有多个视图模型,请注意,如果您调用无参数 c-tor,您将获得模拟模型的自动实例在视图模型中使用。
public class ViewModel_A1 : INotifyPropertyChanged
{
public Model_A instance;
public ViewModel()
{
instance = new instance
{ //your mock value for the properties..
FirstName = "Offer",
LastName = "Somthing"
};
}
public ViewModel(Model_A instance)
{
this.instance = instance;
}
}
这是供您查看的,如果您在 ide 设计器中查看,您将有一个模拟视图模型来显示。
public class View_For_ViewModelA1
{
public View_For_ViewModel_A1()
{
//this is the generated constructor already implemented by the ide, just add to it:
DataContext = new ViewModel_A1();
}
public View_For_ViewModel_A1(ViewModel_A1 vm)
{
DataContext = vm;
}
}
XAML 方面:
<Window x:Class="WpfApplication1.View_For_ViewModel_A1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModel="clr-namespace:WpfApplication1"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
d:DataContext="{d:DesignInstance ViewModel:ViewModel_A1, IsDesignTimeCreatable=True}"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox Text="{Binding FirstName}" />
<TextBox Text="{Binding LastName}" />
</Grid>
</Window>
在更高级的场景中,您可能希望拥有一个与多个模型类相关的单个视图模型类。但您始终应该将视图设置为绑定到单个视图模型。如果您需要对代码进行功夫 - 请确保您在视图模型层中执行此操作。(即创建具有不同模型类型的多个实例的视图模型)
注意:这不是 mvvm 的完整模式。在完整模式中,您可以通过视图模型公开与模型中的方法相关的命令,并且也可以绑定到视图。祝你好运 :)