加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:06:01 所属栏目:百科 来源:网络整理
导读:我在我的wpf MVVM(基于Prism的)应用程序中遇到了一些设计问题,很乐意得到你的建议. 我的模型非常简单: public class Customer{ public string FirstName {get;set;} public string LastName {get;set;}} 如您所见,我的Model类没有任何INotifyPropertyChnage
我在我的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.是前两个选项的混合.不要在视图模型中聚合模型.使用模型和视图模型之间的映射.创建与模型属性对应的视图模型属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读