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支持.这是否合理与否?还有其他建议吗?
谢谢!
选项1。
将在客户端和服务器 (DTO) 之间传输的实体与作为客户端模型的实体分开。在模型中实施INPC。使用这些实体之间的映射。
选项2。
绑定视图仅查看模型属性。创建视图模型属性,它包装相应的模型属性。
选项 3.
是前两个选项的混合。不要在视图模型中聚合模型。使用模型和视图模型之间的映射。创建与模型属性相对应的视图模型属性。