2012-01-31 19 views
6

tengo unas pocas cosas BaseClass:¿Hereda de una clase base que implementa INotifyPropertyChanged?

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

    public event PropertyChangedEventHandler PropertyChanged; 
} 

y una otra clase:

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 está aquí (2Veces), rojo subrayado, que dice:

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

Lo que estoy haciendo mal? Sólo barría el PropertyChangedEvent a una nueva clase: BaseViewModel ..

+0

Enlace movido de nuevo: http://george.softumus.com/inotifypropertychanged-and-magic-strings/ –

Respuesta

6

Usted no puede provocar el evento fuera de la clase que se declara en, utilice el método en la clase base para elevarla (hacer OnPropertyChangedprotected).

+0

todavía no funciona, acaba de editar – eMi

+1

@eMi : Dije que deberías usar el método, por lo que 'protected' es solo el paso necesario para hacerlo. No trates de plantear el evento. –

3

Cambio clase derivada de la siguiente manera:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

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

Hacer una clase base para INPC es un mal diseño en mi opinión.

Este es el lugar donde los libros de texto se puede utilizar un mixin

En definitiva, se le permite proporcionar una implementación por defecto de los miembros de una interfaz. Todavía podría heredar de una clase realmente interesante =)

Cuestiones relacionadas