2014-12-02 29 views
1

我正在構建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設置爲假。 有沒有其他的方法來實現它?

問候

+0

爲什麼你需要'IsDirty'屬性?對於更改跟蹤? – Vlad 2014-12-02 09:35:34

+0

由於我的實體處於斷開狀態,並且我希望能夠在編輯被取消時提示用戶,並且修改了任何屬性。 – adminSoftDK 2014-12-02 09:38:51

+0

爲什麼在從數據庫加載對象後,不能簡單*重設* IsDirty'?像往常一樣構建它,設置屬性,'IsDirty == true',重置'IsDirty = false'(顯然不要調用'OnPropertyChanged'),它將保持'false'直到屬性被改變。 – Sinatr 2014-12-02 09:52:00

回答

1

沒有,沒有一個簡單的方法

你應該重寫你的方法,在方法來檢索實體從數據庫中,它在生成實體自動Isdirty=false設置。 我用nhibernate攔截器和事件做類似的事情,但它不是你的情況。

另一種方法是保存所有原始值的副本,並在任何人請求時計算出骯髒程度。因此,而不是使用isdirty屬性,您應該創建一個方法並保存所有屬性的初始狀態

+0

任何代碼示例都將是有用的,因爲我不知道如何實現它。(var context = new ContextService()) { return new ObservableCollection ( context.Category); } – adminSoftDK 2014-12-02 09:42:18

+0

@adminSoftDK我不知道實體框架如何在內部工作。正如我所說我使用nhibernate。我只是給你一個暗示在哪裏看 – giammin 2014-12-02 09:44:40

+0

好吧,謝謝:) – adminSoftDK 2014-12-02 09:46:46

相關問題