gpt4 book ai didi

c# - 绑定(bind)到 List<> 依赖属性的 WPF 上下文菜单

转载 作者:行者123 更新时间:2023-11-30 18:09:24 25 4
gpt4 key购买 nike

我试图使作为依赖属性的列表的内容显示在 WPF 上下文菜单中。

我有一个具有以下依赖属性的类,一个 Foo 的列表(数据保存类):

    public List<Foo> FooList
{
get { return (List<Foo>)GetValue(FooListProperty); }
set { SetValue(FooListProperty, value); }
}
public static DependencyProperty FooListProperty =
DependencyProperty.Register("FooList", typeof(List<Foo>),
typeof(FooButton));

在 XAML 中,我设置了以下静态资源,我假设它是必需的,因为上下文菜单不是可视化树的一部分:

<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource
x:Key="FooListSource"
Source="{Binding FooList}"/>

<!-- ... -->

</ResourceDictionary>
</UserControl.Resources>

上面的 ResourceDictionary 的一部分还有一个 CompositeCollection,它是使项目显示在实际上下文菜单中所必需的。如果 UserControl CanStop 属性为真,我们还会显示一个分隔符和一个停止命令。这些绑定(bind)也确实失败了,尽管 MenuItems 本身出现了。因此,如果我能弄清楚这些失败的原因,列表可能会更容易。

<CompositeCollection x:Key="FooListItems">
<CollectionContainer
Collection="{Binding Source={StaticResource FooListSource}}"/>
<Separator
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}" />
<MenuItem
Command="{x:Static Buttons:FooButton.Stop}"
Header="Stop"
Visibility="{Binding CanStop,
Converter={StaticResource VisibleIfTrue}}"/>
</CompositeCollection>

最后是上下文菜单本身,也在 ResourceDictionary 中:

<ContextMenu 
x:Key="FooButtonMenu"
ItemsSource="{Binding Source={StaticResource FooListItems}}"
ItemTemplate="{StaticResource FooListTemplate}"
<ContextMenu.CommandBindings>
<CommandBinding
Command="{x:Static Buttons:FooButton.Stop}"
Executed="Stop_Executed" />
</ContextMenu.CommandBindings>
</ContextMenu>

我觉得我发布的代码太多了,但我不确定我能否使这篇文章更简单。仅显示分隔符和硬编码的菜单项。所以一定有什么东西被绑定(bind)搞砸了。绑定(bind)通常没有那么难,但现在当我想绑定(bind)一些不属于同一棵树的东西时,我感到有点迷茫。

欢迎提出任何建议。 :)

最佳答案

如您所料,您的问题似乎是由使用 List<Foo> 引起的而不是 ObservableCollection<Foo> .自 List<Foo>不通知属性更改,让 WPF 识别您已添加或删除项目的唯一方法是临时将 FooList 属性设置为其他内容,然后再将其设置回来。

无需切换到 CLR 属性。只需更改 List<Foo>ObservableCollection<Foo> .

在你的 CompositeCollection 中绑定(bind)的原因不工作是CompositeCollection不是 DependencyObject,因此它不能继承 DataContext .

关于c# - 绑定(bind)到 List<> 依赖属性的 WPF 上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com