2016-03-23 2 views
0

Ich habe gerade ein Wpf-Projekt gestartet, das das MVVM-Muster verwenden wird. Ich habe mein erstes Modell gemacht, aber im Vergleich zu einem normalen Web-Modell wie:Wpf MVVM-Modelle, die OnPropertyChanged-Methode verstehen, können Sie Snippets verwenden?

public string name {get;set;} 

Diese Modelle etwas komplizierter sind, weil sie die INotifyPropertyChanged implementieren.

ich ein Kundenmodell erstellt haben:

public class Customer : INotifyPropertyChanged 
{ 
    // Initizalize default construcktor 
    public Customer(string CustomerName) 
    { 
     Name = CustomerName; 
    } 

    private string _Name; 

    public string Name 
    { 
     get 
     { 
      return _Name; 
     } 
     set 
     { 
      _Name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

} 

Dann bin ich ein wenig verwirrt, wenn ich 2015 Visual Studio wählen für mich, ein Verfahren zu erzeugen, habe ich so etwas wie:

private void OnPropertyChanged(string v) 
{ 
    throw new NotImplementedException(); 
} 

Was sollte in der Methode sein?, Kann Visual Studio dies nicht für Sie mit einem Schnipsel tun? wie das Konstruktor-Snippet "ctor"?

Hoffe jemand kann mir ein paar Tricks geben, um den Prozess ein wenig leichter zu verstehen.

Antwort

2

Sie müssen die Schnittstelle INotifyPropertyChanged implementieren. Beachten Sie, dass Sie in der folgenden Implementierung OnPropertyChanged() (aufgrund der Verwendung des Attributs CallerMemberName in der Methodensignatur) aufrufen können, ohne den Eigenschaftsnamen eingeben zu müssen, wodurch Fehler reduziert und das Refactoring vereinfacht wird.

public class Customer : INotifyPropertyChanged 
{ 
    // Initizalize default construcktor 
    public Customer(string CustomerName) 
    { 
     Name = CustomerName; 
    } 

    private string _Name; 

    public string Name 
    { 
     get 
     { 
      return _Name; 
     } 
     set 
     { 
      _Name = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected internal void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Hinweis, dass es auch eine übliche Praxis, eine abstrakte Basisklasse erstellen zu implementieren INotifyPropertyChanged, dass Ihre Modelle erben. Auf diese Weise müssen Sie dies nicht für jedes Modell implementieren und haben viel redundanten Code.

+0

Hallo, vielen Dank für Ihre Antwort. Müssen Sie nur eine OnPropertyChanged-Methode wie hier machen? oder sollten Sie es für alle Eigenschaften erstellen. – Mikkel

+0

@Mikkel, nur die eine Methode. – WasGoodDone

+0

Der callerMemberName, was meinst du hier? Wenn ich die OnPropertyChanged ("Name") aufrufen; Was soll man dann drin schreiben? – Mikkel