我正在構建WPF應用程序,並且我希望能夠檢查某個實體是否髒,所以我發現這個解決方案在線:如何在OnPropertyChange內部創建IsDirty,但同時在從數據庫加載實體時關閉它
private bool isDirty;
public virtual bool IsDirty
{
get { return isDirty; }
set { isDirty = value; }
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
OnPropertyChanged(true, propertyName);
}
protected void OnPropertyChanged(bool makeDirty, [CallerMemberName] string propertyName = "")
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
if (makeDirty)
{
isDirty = makeDirty;
}
}
然後我就可以使用它像這樣
[Required(ErrorMessage = ErrorMessages.DescriptionRequired)]
[StringLength(60, ErrorMessage = ErrorMessages.DescriptionLength60)]
public string Description
{
get { return description; }
set
{
if (description != value)
{
description = value;
OnPropertyChanged();
}
}
}
而且似乎工作,隨時隨地的特性被改變的實體將弄髒因爲OnPropertyChanged被調用。 我的問題是,當我打開從數據庫的實體(或實體的集合),然後onpropertychanged被稱爲:
SomeEntitiesCollection = new Service().SomeEntities();
然後每個配備實體被標記爲髒,我不能左右它無論如何找,除了經歷循環並將IsDirty設置爲假。 有沒有其他的方法來實現它?
問候
爲什麼你需要'IsDirty'屬性?對於更改跟蹤? – Vlad 2014-12-02 09:35:34
由於我的實體處於斷開狀態,並且我希望能夠在編輯被取消時提示用戶,並且修改了任何屬性。 – adminSoftDK 2014-12-02 09:38:51
爲什麼在從數據庫加載對象後,不能簡單*重設* IsDirty'?像往常一樣構建它,設置屬性,'IsDirty == true',重置'IsDirty = false'(顯然不要調用'OnPropertyChanged'),它將保持'false'直到屬性被改變。 – Sinatr 2014-12-02 09:52:00