2015-09-05 110 views
2

我遇到了一个关于MenuItem绑定的问题,我需要将一个嵌套对象绑定到MenuItemWPF 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代码:

我结合他们喜欢的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> 

当我跑我的项目,发生异常。 附加信息:Set property 'System.Windows.ResourceDictionary.DeferrableContent' threw an exception.

另外: 我需要添加单击事件菜单项像

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

它没有工作,我不知道如何解决这个问题。

回答

1

试试这个:

<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>