2012-01-31 59 views
6

我有這樣的BaseClass:繼承一個實現INotifyPropertyChanged的基類嗎?

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是在這裏(2倍),紅色下劃線,它說:

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/ – 2016-04-25 02:35:48

回答

6

無法提高其聲明在類的外部事件,使用的方法在基類中,以提高它(請OnPropertyChangedprotected)。

+0

它仍然不工作,只是編輯 – eMi 2012-01-31 09:25:41

+1

@eMi :我說你應該使用這種方法,使它成爲「受保護」只是這樣做的必要步驟。不要試圖提高事件。 – 2012-01-31 09:27:14

3

更改派生類如下:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

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

製作一個基類INPC在我看來是不好的設計。

這是教科書的地方,你可以使用一個mixin

總之,它可以讓你提供一個接口的成員的默認實現。你仍然可以繼續從一個實際上有趣的類=)