2013-09-24 2 views
1

을 변경합니다 때 재산, 정보를 얻을의 ListChanged 이벤트 바인딩 목록에서 사용자 정의 클래스의 속성은 내가이 샘플 클래스의 여러 개체로는 바인딩 (() 푸의는 바인딩)가

Class Foo 
Implements INotifyPropertyChanged 

Private _name As String 
Private _numer As Integer 
Private _otherClass As OtherClass 
Private _bindingListOfAnotherClass As BindingList (of AnotherClass) 

End Class 

지금 내가 원하는 이 바인딩 목록의 항목이 변경됩니다.

위에서 알 수 있듯이 인터페이스가 구현되었으며 이벤트도 발생시킵니다. ListChanged 이벤트는 프리미티브 속성에 대해 발생하지만 OtherClass 또는 AnotherClass의 속성이 변경된 경우 (또는 _bindingListOfAnotherclass에서 항목이 추가/제거 된 경우)에는 발생하지 않습니다.

또한 OtherClass 및 AnotherClass에 PropertyChanged 이벤트를 던지고 있습니다.

아이디어가 있으십니까?

답변

1

불행히도 Foo 클래스가 Foo가 이벤트 처리기로 등록하여 OtherClass의 PropertyChanged 이벤트를 특별히 수신하지 않으면 OtherClass가 변경 될 때이를 알 수있는 자동 와이어 업이 없습니다. 이 이벤트 핸들러에서 Foo 자체의 OtherClass 속성이 변경되었다는 내용의 이벤트 변경 이벤트를 발생시킵니다.

이 속성이 getter/setter와 함께 제공되는 경우 변경 사항에 따라 구독을 취소하고 다시 구독해야하기 때문에 약간 까다로울 수 있습니다.

AnotherClass의 BindingList의 경우 BindingList가 INotifyPropertyChanged를 구현하지 않기 때문에 조금 다릅니다. ListChanged 이벤트를 가진 IBindingList를 구현합니다. 그래서 당신은 그것에 가입해야 할 것입니다.

AnotherClass가 INotifyPropertyChanged를 구현하는 한 바인딩 목록은 변경된 이벤트를 Foo로 던져야하며, 이는 자체 PropertyChanged 이벤트를 던질 수 있습니다.

편집 :

private Object _myObject; 
public Object MyObject 
{ 
    get 
    { 
     return _myObject; 
    } 
    set 
    { 
     if (_myObject != value) 
     { 
      if (_myObject != null) 
       _myObject.PropertyChanged -= MyDelegate; 

      _myObject = value; 

      if (_myObject != null) 
       _myObject.PropertyChanged += MyDelegate; 
     } 
    } 
} 

당신이 안전하게에 널 (null)에서 설정할 수 있습니다이 방법을 : 나는 항상 이벤트에 가입 할 것인지 변경할 수있는 속성을 처리하는 방법 여기

일반적이다 값을 다시 null로 되돌리고 이벤트 구독을 관리합니다.

+0

'BindingList'는 [ListChanged 이벤트]를 발생시킵니다 (http://msdn.microsoft.com/en-us/library/ms132742.aspx). – Styxxy

+0

감사합니다. 따라서 내 목표가 있다면 속성이 변경되면 Foo의 BindingList (또는 BindingSource가 BindingSource에 바인딩 됨)가 ListChanged/CurrentItemChanged 이벤트를 throw하므로 다음을 수행해야합니다. - 기본 속성이 변경되면 Foo의 RaiseEvent PropertyChanged - RaiseEvent OtherClass의 속성이 변경되면 OtherClass에서 변경됨 - AnotherClass에서 RaiseEvent PropertyChanged가 처리됨. ListChanged가 AnotherClass의 BindingList에 의해 throw 됨 - OtherClass의 PropertyChanged 및 AnotherChange의 BindingList를 수신하고 Foo에 PropertyChanged 이벤트를 전달하기 위해 Foo의 AddHandler . – mcode

+0

내 의견이 포맷되지 않은 이유는 무엇입니까? – mcode

관련 문제