2012-01-31 8 views
6

私はこのBaseClassのを持っている:INotifyPropertyChangedを実装する1つのベースクラスから継承していますか?

public class BaseViewModel : INotifyPropertyChanged 
{ 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

およびその他のクラス:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

    public string FirstSchemaToCompare 
    { 
     get { return firstSchemaToCompare; } 
     set 
     { 
      firstSchemaToCompare = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("FirstSchemaToCompare")); 
       //StartCommand.RaiseCanExecuteChanged(); 
      } 
     } 
    } 

のPropertyChangedは(2Times)ここで、赤は下線、それは言う:

Error 1 The event BaseViewModel.PropertyChanged' can only appear on the left hand side of += or -= (except when used from within the type 'SchemaDifferenceFinder.ViewModel.BaseViewModel') 

私は何間違っている?私は新しいクラスにPropertyChangedEventを総なめ:BaseViewModel ..

+0

リンクをもう一度移動しました:http://george.softumus.com/inotifypropertychanged-and-magic-strings/ –

答えて

6

をあなたはOnPropertyChangedprotected作る)、それがで宣言されたクラスの外イベントを発生させ、それを高めるために、基本クラスでメソッドを使用しないことができます。次のように

+0

まだ動作していない、ちょうど編集済み – eMi

+1

@eMiあなたはまだ実際に面白いクラスから継承することができます。 :私は、あなたがその方法を使うべきだと言いました。その方法を「保護」することは、そうするために必要なステップにすぎません。イベントを起こさないでください。 –

3

変更派生クラス:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

    public string FirstSchemaToCompare 
    { 
     get { return firstSchemaToCompare; } 
     set 
     { 
      firstSchemaToCompare = value; 
      OnPropertyChanged("FirstSchemaToCompare"); 
     } 
    } 
0

INPCの基本クラスを作るには、私の意見で悪いデザインです。

これは、あなたが要するにmixin

を使用することができ教科書の場所である、それはあなたがインターフェイスのメンバーの既定の実装を提供することができます。

関連する問題