2017-08-02 9 views
0

私はxamarinフォームアプリケーションでデータグリッドを持っていて、編集可能なカラムを持っています。列の値はMySqlデータベースからのもので、ユーザーは値を変更してdbに格納できます。私はIPropertyChangedインターフェイスを使って、ユーザーが値を変更できるようにしました。値の編集には1つの条件があります。新しい値は元の値と同じかそれより大きくなければなりません。私の問題は、元の値より大きい値を入力するたびに値を以前の値に再び編集できないことです。たとえば、元の値は10です。私が入力する新しい値は30です。値を再び変更したい場合は20に設定しますが、元の値は10と20ではなく30ですどのように私は元の値を保持し、それと比較することができますか?元の値にロールバックする方法iPropertyChanged? C#

​​
+0

最初のセットで変数に保存しますか? –

+0

あなたの「最初の」値はいつ測定値が比較されるべきであるか?データを保存した後も最初の値よりも高く、実際の値よりも低い値に変更することを許可しますか? – Icepickle

+0

はい、私はそれを許可します。これは私のデータグリッドにはたくさんの行があります。各行には、データベースの元の値を持つ1つのフィールドがあります。元の値は編集できますが、編集した値は元の値と同じかそれより大きくなければなりません。オリジナルを10としましょう。今は30に編集してから、次の行に移動します。以前に編集された行に来ると、30が表示されます。30を30より小さい数値に編集することはできません。 – batwing

答えて

1

元の値を保存する必要があります。私は次のパターンを使用しています。

あなたはこの

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

ようなモデルと、このようなのviewmodelを持っていると仮定すると、あなたがViewModelインスタンスを作成するときに、あなたがして、それを初期化し

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; 
    } 
} 

(私はより良い読書のためのINotifyPropertyChanged部分を削除しました)対応する。これを実装すると、このような簡単な方法で小切手を追加することができます。

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"); 
     } 
    } 
} 
関連する問題