2012-01-31 6 views
6

mam tej klasy bazowej:Dziedziczenie z jednej klasy bazowej, która implementuje INotifyPropertyChanged?

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

    public event PropertyChangedEventHandler PropertyChanged; 
} 

i drugą klasę:

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 jest tutaj (2 razy), czerwony podkreślił, to mówi:

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') 

Co jestem robić źle? I tylko ogarnęła PropertyChangedEvent do nowej klasy: BaseViewModel ..

+0

Link przeniesiony ponownie: http://george.softumus.com/inotifypropertychik-i-magic-strings/ –

Odpowiedz

6

Ty nie może podnieść zdarzenie poza klasą jest zadeklarowany w, użyj metody w klasie bazowej, aby go podnieść (marka OnPropertyChangedprotected).

+0

nadal nie działa, po prostu edytowany – eMi

+1

@eMi : Powiedziałem, że powinieneś użyć tej metody, przez co jej "ochrona" jest tylko koniecznym krokiem do tego. Nie próbuj podnosić wydarzenia. –

3

Zmiana klasy wyprowadza się następująco:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

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

Making klasę bazową dla INPC jest zła konstrukcja moim zdaniem.

To jest miejsce, gdzie podręcznik można użyć mixin

w skrócie, pozwala na zapewnienie realizacji domyślnej członków interfejsu użytkownika. Nadal będziesz mógł dziedziczyć po naprawdę interesującej klasie =)