2014-02-17 31 views
0

想象一下,我有一個文本框綁定到從數據庫中檢索的值。我有一個取消button.Something象下面這樣:WPF將編輯值與原始值進行比較的最佳方式

<TextBox Text="{Binding [someViewModel].TestVar, Mode=TwoWay}"></TextBox> 

現在說TestVar的值爲10,當用戶更新值,然後按取消鍵,我將展示一個彈出來告訴用戶該your data will be lost. Are you sure you want to proceed?

我的想法是使用TextChangedUpdateSourceTrigger="PropertyChanged"來更新布爾標誌,並在取消按鈕onclick做檢查。但是,如果用戶首先將值從10更新爲5,然後返回10?然後當用戶按下取消按鈕時,應該沒有警報消息。

我可以知道什麼是最有效的方法來實現目標?

回答

1

有多種方法可以實現這一點。

  1. 對視圖模型進行深層克隆並驗證兩個整數值。見How do you do a deep copy an object in .Net

  2. 做一個IntegerViewModel兩個字段

    // the value 
    public int Value { get; set; } 
    // the temporary backup value on edit. 
    public int BackupValue { get; set; } 
    
+0

不是很重要的只是爲了驗證的目的存儲它的副本? –

+2

如果您希望在值更改後避免信息消息,但仍舊具有舊值,則必須知道舊值。如果您保存它,您只能知道舊值。所以你必須以任何方式製作副本。如果只是這個值,我不會爲原始類型製作視圖模型或額外視圖模型的副本。然後將其存儲在您的視圖模型中。 – csteinmueller

0

如果你只是想知道變化perfomed,不完全是其屬性值變成另一個等你可以strore此信息在一個簡單的布爾標誌這樣的:

private bool hasUnsavedChanges; 

private string somePropertyValue; 
public string SomeProperty 
{ 
    get 
    { 
     return this.somePropertyValue; 
    } 

    set 
    { 
     if(this.somePropertyValue!= value) 
     { 
      this.hasUnsavedChanges = true; 
     } 

     this.somePropertyValue= value 
    } 
} 

如果你需要知道的一切有關的變化使得你的TR的拷貝構造函數答覆對象並將其存儲在某個backupCopy字段中。在驗證方法你只是比較現有對象的所有必需的屬性和它的備份

0

在MVVM情況下實現View-modelIEditableObject界面進行說明並在此SO Answer

IEditableObject建議是你要能夠良好的界面隨時隨地回滾更改。

相關問題