Метод обратного вызова DependencyProperty не вызван - PullRequest
0 голосов
/ 29 ноября 2009

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

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

1 Ответ

1 голос
/ 29 ноября 2009

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

...