2010-01-03 2 views

ответ

8

MSDN library entry INotifyPropertyChanged.PropertyChanged Event От:

Public Class DemoCustomer 
    Implements INotifyPropertyChanged 

    Private customerNameValue As String = String.Empty 

    Public Event PropertyChanged As PropertyChangedEventHandler _ 
     Implements INotifyPropertyChanged.PropertyChanged 

    Private Sub NotifyPropertyChanged(ByVal info As String) 
     RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info)) 
    End Sub 

    Public Property CustomerName() As String 
     Get 
      Return Me.customerNameValue 
     End Get 

     Set(ByVal value As String) 
      If Not (value = customerNameValue) Then 
       Me.customerNameValue = value 
       NotifyPropertyChanged("CustomerName") 
      End If 
     End Set 
    End Property 
End Class 
+0

, каковы будут последствия просто поместить 'Sub' в раздел' Set' свойства? – luchosrock

5

Да, лучший (если не единственный) способ сделать это, чтобы полностью скрыть фактические переменной (сделать Private) и выставить его через свойство, которое выстреливает события, когда используется сеттер.

I делайте это регулярно, но я обнаружил, что важно НЕ поднять событие, если новое значение похоже на старое значение. Это устраняет ненужные вызовы функций и иногда предотвращает рекурсивные события.

+0

Большой пункт о не поднимая событие на не-изменения - я видел эту причину проблем с привязкой данных WPF. – itowlson

+0

Часто нет необходимости в каком-либо событии, помните, что вы можете делать почти что угодно в сеттере. –

+0

Что вы имеете в виду, если они похожи? –

0

Каноническое событие для этого события PropertyChanged, которое определено в интерфейсе INotifyPropertyChanged. Вы можете поднять это из своих агентов по настройке. (Обратите внимание, что VB.NET не будет поднимать событие для вас: вы должны включить код для его повышения.)

Если код, который вы хотите запустить при изменении, логически является частью вашего класса (например, обновление статуса клиента когда баланс изменяется), тогда уместно поместить это в средство настройки свойств, а не в обработчик события. Обработчики событий предназначены для того, чтобы внешний код должен был знать об изменениях, например. для обновления пользовательского интерфейса в ответ на изменение статуса клиента.

0

Посмотрите на реализацию интерфейса INotifyPropertyChanged this example, это стандартный метод, используемый для этой функции. Важными компонентами являются метод NotifyPropertyChanged и код внутри обработчиков набора свойств.

Смежные вопросы