2017-08-02 3 views
0

Ich habe ein Datagrid in meiner Xamarin Formular App und es hat eine bearbeitbare Spalte. Die Werte in der Spalte stammen aus der MySql-Datenbank und der Benutzer kann den Wert ändern und in db speichern. Ich habe die IPropertyChanged-Schnittstelle verwendet, damit der Benutzer die Änderungen an dem Wert vornehmen kann. Beim Bearbeiten des Werts gibt es eine Bedingung. Der neue Wert muss gleich oder größer als der ursprüngliche Wert sein. Mein Problem ist, wenn ich einen Wert einlege, der größer als das Original ist, kann ich den Wert nicht mehr auf den vorherigen Wert ändern. Zum Beispiel ist der ursprüngliche Wert 10. Der neue Wert, den ich eingib, ist 30. Wenn ich den Wert noch einmal ändern möchte und dieses Mal auf 20 setze, erlaubt er es mir nicht, denn jetzt ist der ursprüngliche Wert 30, nicht 10 und 20 ist kleiner als 30. Wie kann ich den ursprünglichen Wert beibehalten und damit vergleichen?Wie wird auf den ursprünglichen Wert iPropertyChanged zurückgesetzt? C#

public int ActualReading 
    { 
     get 
     { 
      return _ActualReading; 
     } 

     set 
     { 

      if (value >= _ActualReading) 
      { 
      _ActualReading = value; 
      RaisePropertyChanged("ActualReading"); 

      } 
      else 
      { 
       UserDialogs.Instance.Alert("Meter readings should not be smaller than previous value.","Error","Ok"); 
      } 

     } 
    } 

private void RaisePropertyChanged(String Name) 
    { 
     if (PropertyChanged != null) 

      this.PropertyChanged(this, new PropertyChangedEventArgs(Name)); 
    } 
+0

Speichern Sie es in einer Variablen beim ersten Satz? –

+0

ab wann Ist Ihr "erster" Wert der Wert, mit dem die Messungen verglichen werden sollen? Würden Sie nach dem Speichern Ihrer Daten Änderungen an einem Wert zulassen, der ursprünglich höher als der erste, aber niedriger als der tatsächliche Wert ist? – Icepickle

+0

ja, ich würde es erlauben. Es ist so, mein Datagrid hat viele Zeilen. Jede Zeile hat ein Feld mit dem ursprünglichen Wert aus der Datenbank. Der ursprüngliche Wert kann bearbeitet werden, der bearbeitete Wert muss jedoch gleich oder größer als der ursprüngliche Wert sein. Nehmen wir an, das Original ist 10. Jetzt bearbeite ich es auf 30, dann gehe ich zur nächsten Zeile über. Wenn ich zu der vorher bearbeiteten Zeile komme, wird es 30 anzeigen. Ich kann den Wert 30 nicht auf eine kleinere Zahl als 30 ändern, da jetzt 30 den Originalwert in dieser Zeile ersetzt haben. – batwing

Antwort

1

Sie müssen den ursprünglichen Wert speichern. Ich benutze das folgende Muster.

Angenommen, Sie haben ein Modell wie dieses

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

und ein Ansichtsmodell wie folgt aus (Ich entfernte die INotifyPropertyChanged Teil für eine bessere Lesung)

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

Wenn Sie die ViewModel Instanzen erstellen, initialisieren Sie es mit die entsprechende Model Instanz. Wenn Sie dies implementiert haben, können Sie Ihren Scheck auf einfache Weise hinzufügen.

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"); 
     } 
    } 
} 
Verwandte Themen