我在我的wpf MVVM(基于Prism的)应用程序中遇到了一些设计问题,很乐意得到您的建议。 我的模型很简单:将INotifyPropertyChanged添加到模型?
public class Customer
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
正如你所看到的,我没有为我的模型类中的任何INotifyPropertyChnaged支持。 我也有ViewModel的CustomerDetails屏幕,支持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被更新。 我的问题是 - 因为只有名字属性被通过视图更新,模型本身并不支持INotifyPropertyChanged的,因此项目制定者没有被调用,并且IsDirty保持等于假(因此不更新IsDirty通知在UI上)。
我知道我可以支持INotifyPropertyChanged的模型,然后注册在视图模型的Item.PropertyChanged事件,实际上是IsDirty设置为true,但是 - 由于我还使用CodeFirst,和我的模型类在我的ServerSide和我的客户端之间共享(不使用添加服务引用),我不想将INotifyPreoprtyChanged的东西添加到我的服务器端。
我considaring创建新项目,将使用T4模板复制一个个都是我的实体(如客户),并加入每一个模型INotifyPropertyChanged的支持。 这是否合理或不合理?任何其他建议?
谢谢!
我明白你在说什么,但是,这将需要大量的编码(几乎)没有理由的。我应该在我的视图模型中复制我的模型的每个属性吗? – Asaf 2013-02-14 08:00:53
@Asaf你是对的。我不知道你的项目。如果它只是一个小的话,这可能是一个巨大的开销。但是在大型项目中,当您有像可测试性这样的附加要求时,解耦a.s.o.这将是实现它们的一种方式。 – DHN 2013-02-14 08:07:56