gpt4 book ai didi

c# - 如何在 XAML 中创建 "Window"菜单?

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:02 25 4
gpt4 key购买 nike

我正在创建一个 MVVM Wpf 客户端应用程序。我想在主视图中为应用程序创建菜单,该应用程序上面有一个名为“Window”的菜单项。该菜单项将使用由应用程序中运行的事件窗口列表组成的菜单项子菜单动态更新自身。我创建了一个 ViewManager,每个 View 都向其注册自己以编译事件窗口列表。

我尝试在 XAML 中执行此操作,但在单击“窗口”时出现错误

<MenuItem Header="Window">
<ItemsControl ItemsSource="{Binding ViewMgr.Views}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding DataContext.OpenWindowCmd ,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</MenuItem>

如何使用 MVVM 样式的数据绑定(bind)和命令在 XAML 中的菜单上创建动态更新的菜单项列表?

最佳答案

您正在添加一个新的 ItemsControl 作为菜单项的单个子项,而不是将每个 View 添加为菜单项本身的一个子项。您可能会收到错误消息,因为样式 TargetType 不匹配。 MenuItem 继承自 ItemsControl 本身并公开了一个属性 ItemsSource。尝试以下操作:

<MenuItem ItemsSource="{Binding ViewMgr.Views}" DisplayMemberPath="Title">

<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding DataContext.OpenWindowCmd, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
</MenuItem.ItemContainerStyle>

</MenuItem>

关于c# - 如何在 XAML 中创建 "Window"菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21670585/

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