Вопрос

Я создаю 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>

Если атрибут " ContentList " изменяется, я полагаю, что " ChangeSource " метод в классе TableWithFilder вызывается. Но это не так. После того как я изменил атрибут ContentList, я вызываю следующее событие:

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

Спасибо за любые идеи.

Это было полезно?

Решение

Существует разница между изменением всего свойства (т. е. новой ссылки на указанную коллекцию) и изменением содержимого самого списка. Коллекции имеют собственный интерфейс уведомлений об изменениях, который называется INotifyCollectionChanged. . Поэтому вам нужно будет прослушать изменение свойства, которое у вас есть, и внутри него перехватить события INotifyCollectionChanged в новом экземпляре коллекции, а затем ответить на них.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top