2016-04-17 10 views
0

私はPostharpをMVVM-Lightで作成した既存のプロジェクトに実装しました。NotifyPropertyChanged属性でコンパイラエラーが発生する

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

:プログラムを起動するとき、私は、このコンパイルエラーを取得今

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

:私はPostSharpのNotifyPropertyChanged属性を実装

public WindowState WindowState 
{ 
    get 
    { 
     return windowState; 
    } 

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

:私は次のようのviewmodelで、私のプロパティを定義し私はそのようなメソッドを自分のビューモデルに実装する必要がありますか、またはオーバーライドされたViewModelBaseに実装する必要がありますか?

+1

はい。クラスを継承するときは、継承されたクラスに関連付けられたメソッドを実装する必要があることがよくあります。この場合、ウィンドウペイントメソッドに新しいデータでウィンドウを更新するよう通知するために、変更イベントが必要です。参照してください:https://www.postsharp.net/model/inotifypropertychanged – jdweng

+0

これは私にとっては「大規模なコードの削減」の違いです。このメソッドのオーバーライドをViewModelBaseを継承する基本クラスに実装できますか?私はそのようなメソッドをViewModel実装から外しておきたい。 – chris579

+0

はい、または別の.csモジュールの別の部分クラスです。 – jdweng

答えて

0

[NotifyPropertyChanged]という属性をクラスViewModelBaseにのみ適用します。それは継承を通じて子孫クラスに到達します。

関連する問題