将INotifyPropertyChanged添加到模型?

Asa*_*saf 7 .net c# wpf mvvm inotifypropertychanged

我在我的wpf MVVM(基于Prism的)应用程序中遇到了一些设计问题,很乐意得到你的建议.我的模型非常简单:

public class Customer
{
   public string FirstName {get;set;}
   public string LastName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我的Model类没有任何INotifyPropertyChnaged支持.我还为CustomerDetails屏幕提供了ViewModel,它支持INotifyPropertyChanged.

public class CustomerDetailsViewModel:INotifyPropertyChanged /*Or NotificationObject*/
{
   /*INotifyPropertyChanged event */
   private Customer item;
   public Customer Item
   {
      get{return item;}
      set
      {
         item=value; 
         //Raise PropertyChanged
         //Set IsDirty to true
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我正在使用绑定到Item.FirstName和我正在更新的ViewModel.我的问题是 - 因为只有FirstName属性通过View更新,而Model本身不支持INotifyPropertyChanged,因此Item setter没有被调用,并且IsDirty仍然等于false(因此不会更新IsDirty通知)用户界面).

我知道我可以在模型中支持INotifyPropertyChanged,然后在视图模型中注册到Item.PropertyChanged事件,并实际将IsDirty设置为true,但是 - 因为我也使用CodeFirst,而我的Model类在我的ServerSide之间共享和我的客户端(不使用添加服务参考),我不想将INotifyPreoprtyChanged内容添加到我的服务器端.

我正在考虑创建新项目,它将使用T4模板逐个复制我的所有实体(作为客户)并为每个模型添加INotifyPropertyChanged支持.这是否合理与否?还有其他建议吗?

谢谢!

Den*_*nis 4

选项1。
将在客户端和服务器 (DTO) 之间传输的实体与作为客户端模型的实体分开。在模型中实施INPC。使用这些实体之间的映射。

选项2。
绑定视图仅查看模型属性。创建视图模型属性,它包装相应的模型属性。

选项 3.
是前两个选项的混合。不要在视图模型中聚合模型。使用模型和视图模型之间的映射。创建与模型属性相对应的视图模型属性。