c# - WPF MenuItem 绑定(bind)问题

标签 c# wpf

我遇到了有关 MenuItem 绑定(bind)的问题,我需要将嵌套对象绑定(bind)到 MenuItem

public class QuestionType
{
    public string Name { get; set; }

    public ICollection<QuestionType> Types { get; set; }
}

public class ViewModel
{
    public ICollection<QuestionType> QuestionTypes { get; set; }

    public ViewModel()
    {
        QuestionTypes = new List<QuestionType>()
        {
            new QuestionType() { Name="Completion" },
            new QuestionType() { Name="Easy" },
            new QuestionType() { Name="MoreType", Types = new List<QuestionType>()
            {
                new QuestionType() { Name="SingleChoice" },
                new QuestionType() { Name="MultiChoice" },
                new QuestionType() { Name="Blend" },
            } },
        };
    }
}

public partial class CustomMenu : UserControl
{
    public CustomMenu()
    {
        InitializeComponent();
        this.DataContext = new ViewModel();
    }
}

在 XAML 代码中:

我像这样将它们绑定(bind)到 MenuItem:

<MenuItem ItemsSource="{Binding QuestionTypes}">
    <MenuItem.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:QuestionType}" 
                                  ItemsSource="{Binding Types}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type local:QuestionType}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </MenuItem.Resources>
</MenuItem>

当我运行我的项目时,发生了异常。 附加信息:设置属性“System.Windows.ResourceDictionary.DeferrableContent”引发异常。

另外: 我需要为菜单项添加点击事件,例如

<MenuItem.Resources>
 ...
</MenuItem.Resources>
<MenuItem.ItemContainerStyle>
    <Style TargetType="{x:Type MenuItem}">
        <EventSetter Event="Menu.Click" Handler="MenuItem_Click"/>
    </Style>
</MenuItem.ItemContainerStyle>

没有成功,我不知道如何解决这个问题。

最佳答案

试试这个:

<MenuItem Header="Question Type" ItemsSource="{Binding QuestionTypes}" Click="MenuItem_Click">
    <MenuItem.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:QuestionType}" ItemsSource="{Binding Types}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </MenuItem.Resources>
</MenuItem>

关于c# - WPF MenuItem 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413723/

相关文章:

c# - Crystal 报表图表细节抑制

c# - List <对象>选择使用多个值

c# - 如何使用 XPath 选择两个节点之间的所有元素

c# - 来自属性设置函数的 WPF 数据验证

C# 解决方案布局 - WPF + ASP.NET Core + 共享代码

wpf - 为什么在构建引用 WinRT API 的 WPF 应用程序时收到 'ResolveManifestFiles task failed' 错误?

c# - 将新列写入现有 CSV 文件

wpf - Caliburn.Micro WindowManager 和 Window 构造函数参数

c# - 如何检测嵌套属性的变化?

c# - 相关 if 条件由 && 运算符控制