DependencyProperty Callback-Methodが呼び出されていません
-
06-07-2019 - |
質問
依存関係プロパティ(ソース)を使用してUserControl(TableWithFilter.xaml)を作成します。 UserControlは、さまざまなアイテムのソースプロパティを持つテーブルです。 XAMLを作成し、XAMLバインディングを介してソースプロパティを設定しました。これまでのところとても良い。
ただし、依存関係プロパティの値が変更された場合、定義されたコールバックメソッドは呼び出されません。したがって、テーブルのエントリを更新できません。コールバックメソッドが呼び出されない理由を誰かが知っていますか?
クラス" TableWithFilter"のプロパティの定義は次のとおりです。
Public Shared ReadOnly SourceProperty As DependencyProperty = _
DependencyProperty.Register("Source", GetType(List(Of TableViewItem)), GetType(TableWithFilter), _
New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf TableWithFilter.ChangeSource)))
およびコールバックメソッド:
Private Shared Sub ChangeSource(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim table As TableWithFilter = source
table.Source = e.NewValue
End Sub
そしてここにXAML:
<Border Grid.Row="1" Grid.Column="1" BorderBrush="{StaticResource ElementBorder}" BorderThickness="1">
<local:TableWithFilter x:Name="SearchResultTable" Source="{Binding Source={StaticResource contentFacade}, Path=ContentList}" />
</Border>
属性&quot; ContentList&quot;が変更されます&quot; ChangeSource&quot; TableWithFilderクラスのメソッドが呼び出されます。しかし、そうではありません。 ContentList属性を変更した後、次のイベントを発生させます:
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ContentList"))
アイデアについてはThx。
解決
プロパティ全体の変更(つまり、指定されているコレクションへの新しい参照)とリスト自体の内容の変更には違いがあります。コレクションには、 INotifyCollectionChangedという独自の変更通知インターフェイスがあります。
。そのため、今必要なプロパティの変更をリッスンし、その内部で INotifyCollectionChanged
イベントを自分で新しいコレクションインスタンスにフックしてから、それらに応答する必要があります。
所属していません StackOverflow