Question

Je crée un UserControl (TableWithFilter.xaml) avec une propriété de dépendance (source). UserControl est une table avec une propriété source pour les différents éléments. J'ai créé le code XAML et défini la propriété source via la liaison XAML. Jusqu'ici tout va bien.

Mais si la valeur de la propriété de dépendance est modifiée, la méthode de rappel définie n'est pas appelée. Par conséquent, je ne peux pas mettre à jour les entrées de ma table. Quelqu'un a-t-il une idée de la raison pour laquelle la méthode de rappel n'est pas appelée?

Voici la définition de ma propriété dans la 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)))

et la méthode de rappel:

 Private Shared Sub ChangeSource(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
        Dim table As TableWithFilter = source
        table.Source = e.NewValue
    End Sub

et ici le 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>

Si l'attribut " ContentList " est modifié, cela signifie que le " ChangeSource " La méthode dans la classe TableWithFilder est appelée. Mais ce n'est pas le cas. Après avoir modifié l'attribut ContentList, je déclenche l'événement suivant:

RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ContentList"))

Merci pour toutes les idées.

Était-ce utile?

La solution

Il y a une différence entre la propriété entière qui change (c'est-à-dire une nouvelle référence à une collection spécifiée) et le contenu de la liste elle-même qui change. Les collections ont leur propre interface de notification de modification appelée INotifyCollectionChanged . Vous devez donc écouter le changement de propriété que vous avez maintenant et, à l'intérieur, lier les événements INotifyCollectionChanged sur la nouvelle instance de la collection, puis y répondre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top