c# – 将INotifyPropertyChanged添加到模型中?

前端之家收集整理的这篇文章主要介绍了c# – 将INotifyPropertyChanged添加到模型中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的wpf MVVM(基于Prism的)应用程序中遇到了一些设计问题,很乐意得到你的建议.
我的模型非常简单:
public class Customer
{
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

如您所见,我的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
      }
   }
}

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

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

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

谢谢!

解决方法

选项1.
在客户端和服务器(DTO)之间传输的独立实体,来自实体,这些实体是客户端的模型.在模型中实现INPC.使用这些实体之间的映射.

选项2.
绑定视图仅查看模型属性.创建视图模型属性,其中包含相应的模型属性.

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

猜你在找的C#相关文章