2016-04-17 13 views
0

Ich habe Postharp in mein bestehendes Projekt mit MVVM-Light implementiert. I definiert meine Objekte im Ansichtsmodell, wie folgend:NotifyPropertyChanged Attribut erzeugt Compiler Fehler

public WindowState WindowState 
{ 
    get 
    { 
     return windowState; 
    } 

    set 
    { 
     if(windowState != value) 
     { 
      windowState = value; 
      RaisePropertyChanged("WindowState"); 
     } 
    } 
} 

I Postsharp des NotifyPropertyChanged Attribut implementiert:

[NotifyPropertyChanged] 
public class MainViewModel : ViewModelBase 
{ 
    public WindowState WindowState { get; private set; } 
} 

Jetzt habe ich diesen Compiler-Fehler erhalten, wenn Sie das Programm starten:

Class ViewModels.MainViewModel implements INotifyPropertyChanged but does not define an OnPropertyChanged method with the following signature: void OnPropertyChanged(string propertyName)

Muss ich eine solche Methode in mein Viewmodel oder sogar in eine überschriebene ViewModelBase implementieren?

+1

Ja. Wenn Sie eine Klasse erben, müssen häufig Methoden implementiert werden, die der geerbten Klasse zugeordnet sind. Das Änderungsereignis wird in diesem Fall benötigt, um die Window Paint-Methode anzuweisen, das Fenster mit neuen Daten zu aktualisieren. Siehe: https://www.postsharp.net/model/inotifypropertychanged – jdweng

+0

Gut für mich ist das der Unterschied von "Massive Code Reduction.". Kann ich diese Methodenüberschreibung in eine Basisklasse implementieren, die von ViewModelBase erbt? Ich möchte solche Methoden aus meiner ViewModel-Implementierung heraushalten. – chris579

+0

Ja oder eine andere Teilklasse in einem anderen .cs-Modul. – jdweng

Antwort

0

Wenden Sie das Attribut [NotifyPropertyChanged] nur auf die Klasse ViewModelBase an. Es wird durch Vererbung zu den Nachkommenklassen gelangen.