1

为什么更新集合时我的 WPF ContextMenu 数据绑定未按预期更新,但 ItemTemplate 正确显示上下文菜单文本?

在下面的代码中,当我不尝试更新 ObservableCollection 时,此方法有效。当基础 ObservableCollection 更新时,DataTemplate 更新没有问题,并按预期显示新的 MenuItem 文本。但是,刷新发生后 MenuItem.Tag 是否返回 Nothing?

数据绑定 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 和 Filter 在发生过滤并删除项目后未更新 MenuItem.Tag 绑定有关。我添加了 CollectionViewSource.View.Refresh() ,其中集合将发生变化,但这仍然不能解决问题。

更新 #2 我已经实现了 INotifyPropertyChanged 这对过滤问题没有帮助。如果我删除 CollectionViewSource 上的过滤器,则不会发生此问题。我还在 MenuItem.Tag 绑定中添加了一个转换器,并且在应用过滤后不会调用它,然后将 MenuItem.Tag 设置为 Nothing。

4

2 回答 2

-1

当从集合中添加或删除项目时,可观察集合发送属性更改通知事件,当项目的内容发生更改时它不会发送更新。尝试自己发送通知,看看您的 WPF 视图是否更新。

于 2009-08-28T15:10:04.760 回答
-1

而不是使用 StaticResource 使用 DynamicResource 可以帮助你。如下

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}"
于 2012-12-05T19:33:23.593 回答