2012-01-31 25 views
6

Tôi có BaseClass này:Thừa kế từ một baseclass thực hiện INotifyPropertyChanged?

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

    public event PropertyChangedEventHandler PropertyChanged; 
} 

và một lớp khác:

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 là ở đây (2Times), đỏ gạch chân, nó nói:

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

Những gì tôi làm sai? Tôi chỉ quét các PropertyChangedEvent đến một lớp học mới: BaseViewModel ..

+0

Liên kết được chuyển lại: http://george.softumus.com/inotifypropertychanged-and-magic-strings/ –

Trả lời

6

Bạn không có thể nâng cao sự kiện bên ngoài lớp nó được khai báo trong, sử dụng phương pháp này trong các lớp cơ sở để nâng cao nó (chắc OnPropertyChangedprotected).

+0

nó vẫn không hoạt động, chỉ cần chỉnh sửa – eMi

+1

@eMi : Tôi nói bạn nên sử dụng phương pháp, làm cho nó 'bảo vệ' chỉ là bước cần thiết để làm như vậy. Đừng cố gắng nâng cao sự kiện. –

3

Thay đổi lớp có nguồn gốc như sau:

public class SchemaDifferenceViewModel : BaseViewModel 
{ 
    private string firstSchemaToCompare; 

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

Làm một lớp cơ sở cho INPC là thiết kế xấu trong quan điểm của tôi.

Đây là nơi giáo trình mà bạn có thể sử dụng một mixin

Nói tóm lại, nó cho phép bạn để cung cấp một thực hiện mặc định của các thành viên của một giao diện. Bạn vẫn có thể kế thừa từ một lớp học thực sự thú vị =)

Các vấn đề liên quan