2013-04-15 11 views
7

Czy można wywołać pewne zdarzenie, gdy coś zmieni się w danej klasie?Wyzwalanie zdarzenia, gdy coś się zmieni w klasie

E.g. Mam klasę, która ma pola 100, a jedna z nich jest modyfikowana zewnętrznie lub wewnętrznie. Teraz chcę złapać to wydarzenie. Jak to zrobić?

Najbardziej zastanawiam się, czy jest jakaś sztuczka, aby zrobić to szybko dla naprawdę rozszerzonych klas.

+0

Czy to służy do debugowania, czy też do aktualizacji interfejsu użytkownika? Odpowiedź będzie się odpowiednio różnić. –

+0

Do aktualizacji interfejsu użytkownika i wykonywania wielu innych czynności – Nickon

Odpowiedz

13

Jako najlepszych praktyk, konwertowanie pól publicznych właściwościach manualnych i realizować swoje class z INotifyPropertyChangedinterface w celu podniesienia zmianę event.

EDIT: Ponieważ wspomniane 100 pól Proponuję byłaby kod jak w tym wielkim odpowiedź: Tools for refactoring C# public fields into properties

Oto przykład tego:

private string _customerNameValue = String.Empty; 
public string CustomerName 
{ 
    get 
    { 
     return this._customerNameValue; 
    } 

    set 
    { 
     if (value != this._customerNameValue) 
     { 
      this._customerNameValue = value; 
      NotifyPropertyChanged(); 
     } 
    } 
} 
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

to sprawdzić: INotifyPropertyChanged Interface

+0

Obawiałem się tego. Potrzebuję ręcznie zmienić każde pole: S – Nickon

+2

Przeprowadź korekcję kodu! Zobacz, jak to proste: [Narzędzia do refaktoryzacji pól publicznych C# do właściwości] (http://stackoverflow.com/questions/1028679/tools-for-refactoring-c-sharp-public-fields-into-properties) –

+1

Sprawdź również wszystkie odpowiedzi na [to pytanie] (http://stackoverflow.com/questions/1315621/implementing-inotifypropertychized-does-a-better-way-exist). – TylerOhlsen

Powiązane problemy