Mvvm模型ViewModel
它可以被命名为MVVM模型或不? 因为View通过ViewModelData与DataModel交互。 视图应该只与ViewModelData交互? 我确实在某个地方读过,MVVM模型应该在ViewModel中实现INotify而不是在Model中。 这样对吗?
namespace WpfApplication135 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new ViewModelData(); } } public class ViewModelData { public DataModel DM { get; set; } public ViewModelData() { DM = new DataModel(); } } public class DataModel : INotifyPropertyChanged { public int label; public int Label { get { return label; } set { label = value; RaisePropertyChanged("Label"); } } public DataModel() { Action Update = new Action(Run); IAsyncResult result = Update.BeginInvoke(null, null); } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string info) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(info)); } public void Run() { int i=0; while(true) { System.Threading.Thread.Sleep(2000); Label = ++i; } } } }
XAML
<Grid> <Label Content="{Binding DM.Label}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/> </Grid>
MVVM最初的想法确实是View不应该知道(不依赖于)Model。
在实践中,这意味着在ViewModel中重新实现所有这些Model属性(参见下图中的浅黄色框),这是很多工作。 而当你的模型可以很容易地实现INPC时,例如从数据库模式中生成它时,会非常痛苦。 在数据库优先模式下的entity framework允许您通过T4模板注入INPC代码。
很快达成了共识,转发一个ViewModel.Model
属性并绑定到该属性就好,就像你的DM
属性一样。 看图中的浅蓝色方块。
在这幅图中,这个问题非常好,请注意右上angular的大量箭头。 他们描绘了各种解决scheme,您可以使用它们的任意组合。
MVVM的一点是你的视图不应该知道你的数据模型,反之亦然。 这就是为什么有一个ViewModel。 现在,你的ViewModel是浪费的代码。 它什么都不做。
您可能需要更多地阅读MVVM,因为解释这里的Q&A格式太宽泛了。