Почему привязка данных WPF не обновляется после фильтрации коллекции? - PullRequest
1 голос
/ 28 августа 2009

Почему моя привязка данных WPF ContextMenu не обновляется должным образом при обновлении коллекции, однако ItemTemplate правильно отображает текст контекстного меню?

В приведенном ниже коде это работает, когда я не пытаюсь обновить ObservableCollection. Когда базовый ObservableCollection обновляется, DataTemplate обновляется без проблем и отображает новый текст MenuItem, как и ожидалось. Однако MenuItem.Tag ничего не возвращает после обновления?

Связанный с данными MenuItem.Tag работает при первой загрузке коллекции, но не после обновления. Любые идеи о том, как я могу найти эту ошибку? Частичный код XAML показан ниже:

<ListBox ItemsSource="{Binding Source={StaticResource ListBoxViewSource}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <WrapPanel>
                <WrapPanel.ContextMenu>
                    <ContextMenu>
                        <Separator/>
                        <MenuItem ItemsSource="{Binding Source={StaticResource ContextViewSource}}" ItemTemplate="{StaticResource DataTemplate}">
                            <MenuItem.Tag>
                                <Binding Path="ID" Source="{StaticResource ContextViewSource}"/>
                            </MenuItem.Tag>

Обновление № 1: Кажется, проблема связана с CollectionViewSource и фильтром, который не обновляет привязку MenuItem.Tag после фильтрации и удаления элемента. Я добавил CollectionViewSource.View.Refresh (), где коллекция будет меняться, однако это по-прежнему не решает проблему.

Обновление № 2 Я уже реализовал INotifyPropertyChanged, который не помогает с проблемой фильтрации. Если я удаляю фильтр на CollectionViewSource, то проблема не возникает. Я также добавил конвертер в привязку MenuItem.Tag, и он не вызывается после применения фильтрации, а затем для MenuItem.Tag устанавливается значение Nothing.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2012

Вместо использования StaticResource используйте DynamicResource, который может вам помочь. Вроде как

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}"
0 голосов
/ 28 августа 2009

Наблюдаемая коллекция отправляет события уведомления об изменении свойства, когда элементы добавляются или удаляются из коллекции, она не отправляет обновления, когда изменяется содержимое элементов.Попробуйте отправить уведомления самостоятельно и посмотрите, обновляется ли ваш WPF view.

...