簡體   English   中英

wpf:綁定嵌套菜單項

[英]wpf: Binding of nested Menu items

請注意:這個問題與WPF不同-因為我要使用自己的視圖模型,因此如何使用綁定創建菜單和子菜單 MyFirstViewModel,MySecondViewModel,MyThirdViewModel無法合並到一種MenuItemViewModel中,而這3個視圖模型的分層是我的問題,有關分層數據模板的答案對我不起作用。

我想做一個菜單,我知道我有3個等級。

  1. 第一層是一個靜態菜單項
  2. 第二層是通過綁定到我的視圖模型中的ObservableCollection < MySecondViewModel >生成的。
  3. MySecondViewModel中,我還有一個ObservableCollection < MyThirdViewModel > ,我想將其綁定到我的第3個菜單項級別。

在第三級中,我還想使用帶有Checkbox的模板,該模板也綁定到MyThirdViewModel中的屬性。 所以我的ViewModels看起來像這樣:

public class MyFirstViewModel 
{
    public ObservableCollection<MySecondViewModel> MenuItemsSecondLevel { get; set; }
    ...
}

public class MySecondViewModel
{
    public string DisplayName{get; set;}
    public ObservableCollection<MyThirdViewModel> MenuItemsThirdLevel{ get; set; }
    ...
}

public class MyThirdViewModel
{
    public string DisplayName{get; set;}
    public bool IsChecked {get;set;}
    ...
}

如何基於此創建WPF菜單? 如果我嘗試這樣:

<Menu>
  <MenuItem Header="Select Source:" ItemsSource="{Binding MenuItemsSecondLevel}">
   <MenuItem Header="{Binding DisplayName}" ItemsSource="{Binding MenuItemsThirdLevel}" >
     <MenuItem.ItemTemplate>
        <DataTemplate>
           <CheckBox  Content="{Binding DisplayName}" IsChecked="{Binding IsChecked}"/>
        </DataTemplate>
     </MenuItem.ItemTemplate>
   </MenuItem>
 </MenuItem>
</Menu>

然后我的綁定不起作用。 他找不到我的任何收藏。如果我將其更高級,例如:

<Menu>
  <MenuItem Header="Select Source:" ItemsSource="{Binding MenuItemsSecondLevel}">
    <MenuItem.ItemTemplate>
      <DataTemplate>
        <MenuItem Header="{Binding DisplayName}" ItemsSource="{Binding MenuItemsThirdLevel}" >
          <MenuItem.ItemTemplate>
            <DataTemplate>
              <CheckBox Content="{Binding DisplayName}" IsChecked="{Binding IsChecked}" />
            </DataTemplate>
          </MenuItem.ItemTemplate>
        </MenuItem>
      </DataTemplate>
    </MenuItem.ItemTemplate>
  </MenuItem>
</Menu>

他找到了第二級,但沒有找到第三級。 制作菜單級別(如視圖模型的結構)的最佳方法是什么?

請注意,我知道您可以選擇菜單項,但是出於設計原因,我們在此處使用此復選框。

你可以用這個

<Menu>
    <MenuItem Header="Select Source:"
              ItemsSource="{Binding FirstViewModel.MenuItemsSecondLevel}">
        <MenuItem.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:MySecondViewModel}"
                                      ItemsSource="{Binding MenuItemsThirdLevel}">
                <TextBlock Text="{Binding DisplayName}" />
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type local:MyThirdViewModel}">
                <CheckBox Content="{Binding DisplayName}" />
            </DataTemplate>
        </MenuItem.Resources>
    </MenuItem>
</Menu>

假設FirstViewModel是視圖FirstViewModel的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM