DependencyProperty Callback-Método não é chamado
-
06-07-2019 - |
Pergunta
Eu criar um UserControl (TableWithFilter.xaml) com uma propriedade de dependência (fonte). O UserControl é uma tabela com a propriedade de origem para os diferentes itens. Eu criei o XAML e definir a propriedade de origem através do XAML vinculação. Até aqui tudo bem.
Mas, se o valor da propriedade de dependência é alterada, o método de retorno definido não é chamado. Portanto, não posso atualizar as entradas na minha mesa. Alguém tem uma idéia de por que o método de retorno não é chamado?
Aqui está a definição da minha propriedade na classe "TableWithFilter":
Public Shared ReadOnly SourceProperty As DependencyProperty = _
DependencyProperty.Register("Source", GetType(List(Of TableViewItem)), GetType(TableWithFilter), _
New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf TableWithFilter.ChangeSource)))
e o método de retorno de chamada:
Private Shared Sub ChangeSource(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim table As TableWithFilter = source
table.Source = e.NewValue
End Sub
e aqui o 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>
Se o atributo "ContentList" é alterada I expet que o método "ChangeSource" na classe TableWithFilder é chamado. Mas este não é o caso. Depois eu mudei o atributo ContentList, Eu levanto o seguinte evento:
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ContentList"))
Thx para todas as idéias.
Solução
Há uma diferença entre toda a propriedade mudar (ou seja, uma nova referência a uma coleção que está sendo especificado) vs. o conteúdo da lista em si mudando. Coleções têm sua própria interface de notificação de alteração chamado INotifyCollectionChanged
. Então, o que você precisa fazer é ouvir para a mudança de propriedade você tem agora e, dentro disso, ligar os eventos INotifyCollectionChanged
-se sobre a nova instância de coleção e, em seguida, responder a essas.