2012-07-03 68 views
3

我正在编写一个使用MVVM模式的C#应用​​程序,我想知道在每个属性的基础上实现更改跟踪的最佳方法是什么。我目前已经实现了INotofyPropertyChanged并且标记整个对象是否脏,但是我必须实现的一些要求是他们希望能够通过UI上的文本框显示每个已更改的属性的图像。实施每个属性更改跟踪

基本上我的视图模型都有一个私有字段,它是我的类包含我的DataAccess层的数据。所以基本上一类将是这样的:

private BusinessObj _data 


public Name 
{ 
    get{ return _data.Name;} 
    set 
    { 
     if(_data.Name != value) 
     { 
      _data.Name = value; 
      PropertyChanged("Name"); 
      IsDirty = true; 
     } 
    } 
} 

我的数据访问层基本上是序列化和反序列化XAML配置文件配置我们的产品。

+0

我保存原件,比较当前值与原来的。这将使您能够恢复更改。 – cadrell0

+0

你的对象是否需要跟踪这个?由于你的对象已经实现了'INotifyPropertyChanged',你可以订阅那个事件并保存一个已经改变的属性列表吗? – hvd

+0

@hvd如果我追踪到每次他们在文本框中输入一个字符时我都会得到一个更新,而且我只关心它是否与原始文件不同,所以我可以让UI知道它应该绘制星号 – twreid

回答

0

您可以在模型类中使用ObservableCollection,并在可观察业务数据集合发生更改时让您的UI订阅该事件。

在模型视图

public class BusinessObjList : ObservableCollection<BusinessObj> 
{ 
    public BusinessObjList() : base() 

    public void AddBusinessObj 
    { 
     // your own manipulation 
    } 
} 

在UI

BusinessObjList BL = new BL(); 
BL.CollectionChanged += new NotifyCollectionChangedEventHandler(bl_CollectionChanged); 

static void bl_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    // handle the change in UI. 
}