2017-02-21 116 views
-1

我有一個父類(實現INotifyPropertyChanged),有一個屬性是綁定列表(ChildClass)。 ChildClass也執行INotifyPropertyChangedINotifyPropertyChanged在子綁定列表

如果我綁定的東西給父類,它正確地反映變化的父類的屬性 - 與變化的例外:

  1. 元素在BindingList(of ChildClass) [數量,添加或刪除項目的結果在列表中]。 OR
  2. BindingList(of ChildClass)

中的一個項目的屬性的改變如果我直接綁定的東西的ChildClass的項目(即在BindingList(Of ChildClass)項目) - 的作品了。

如何連接它,使#1和#2適當反映在綁定對象中?

以下是保羅偉大答案的vb版本。沒有List_Changed事件,對BindingList的更改未正確傳播到嵌套業務對象的鏈中。有了它,它們就是!

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 
Private WithEvents m_children As IBindingList 

Public Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing) 
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) 
End Sub 

Public Property Children As IBindingList 
    Get 
     Return m_children 
    End Get 
    Set 
     m_children = Value 
     NotifyPropertyChanged() 
    End Set 
End Property 

Private Sub m_children_ListChanged(sender As Object, e As ListChangedEventArgs) Handles m_children.ListChanged 
    NotifyPropertyChanged(NameOf(Children)) 
End Sub 
+0

請給我們一些代碼。 – jlvaquero

回答

1

BindingList<T> proovides事件BindingList<T>.ListChanged

時出現在列表中的更改列表或項目。

您可以在父類中輕鬆實現事件處理程序,並將其連接到ListChanged。 (我假定孩子財產 - 的BindingList<ChildClass> - 被命名爲Children

private void Children_OnListChanged(object sender, EventArgs e) 
{ 
    OnPropertyChanged(nameof(Children)); 
} 

隨着OnPropertyChanged,您可以通知用戶,該Children屬性已更改。如果在你的類沒有實現,但是,它可能看起來像下面

private void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
} 

其中[CallerMemberName](其中居住在System.Runtime.CompilerServices命名空間)是編譯器使用已經調用OnPropertyChanged屬性的名稱的提示如果沒有明確的值傳遞。

+1

現象。 Just Plain Works。謝謝。 – skavan

+0

很高興我能幫忙:) –

相關問題