2017-08-02 27 views
0

我在xamarin形式的應用程序一個DataGrid,它有一個可編輯的列。該列中的值來自MySql數據庫,用戶可以更改該值並存儲到數據庫。我使用IPropertyChanged接口來允許用戶對值進行更改。編輯該值時有一個條件。新值必須等於或大於原始值。我的問題是每當我輸入一個大於原始值的值時,我無法再將值編輯爲以前的值。例如,原來的值是10,新的價值我輸入30。如果我想再次更改值,這個時候,我將其設置爲20,這是不是讓我因爲現在的原值是30而不是10和20小於30.如何保留原始價值並與之比較?如何回滾到原始值iPropertyChanged? C#

​​
+0

將它保存在第一集中的變量? –

+0

從當是你的「第一次」的價值在其上的測量都應該是相對於一個上?在保存數據後,您是否允許更改爲原始高於第一個值但低於實際值? – Icepickle

+0

是的,我會允許的。就像這樣,我的數據網格有很多行。每行都有一個來自數據庫的具有原始值的字段。原始值可以編輯,但編輯的值必須等於或大於原始值。假設原來是10.現在我編輯它到30,然後我移動到下一行。如果我來之前編輯的行,它會顯示30.我不能將值30編輯以較小的數字比30,因爲現在30已經取代10該行原來的值。 – batwing

回答

1

您必須存儲原始值。我正在使用以下模式。

假設你有一個像這樣

public class Model 
{ 
    public int ActualReading {get; set;} 
} 

一個模型,這樣的視圖模型(我刪除了更好的閱讀了INotifyPropertyChanged部分)

public class ViewModel 
{ 
    private readonly Model MyModel; 

    private int _actualReading; 
    public int ActualReading 
    { 
     get { return _actualReading; } 
     set { _actualReading = value; } 
    } 

    public ViewModel(Model model) 
    { 
     MyModel = model; 
     ActualReading = model.ActualReading; 
    } 

    public Model GetModel() 
    { 
     MyModel.ActualReading = ActualReading; 

     return MyModel; 
    } 
} 

當您創建ViewModel情況下,你用初始化相應的Model實例。當你已經實現這個,你可以像這樣簡單的方式添加你的支票。

private int _actualReading; 
public int ActualReading 
{ 
    get { return _actualReading; } 
    set 
    { 
     if (value >= MyModel.ActualReading) 
     { 
      _actualReading = value; 
     } 
     else 
     { 
      UserDialogs.Instance.Alert("Meter readings should not be smaller than previous value.", "Error", "Ok"); 
     } 
    } 
}