簡體   English   中英

每個綁定項目的子菜單

[英]Sub-menu for each binding item

按照Omer van Kloeten的示例 ,我用可觀察的集合中的菜單項填充菜單。 我為單個收集項得到了一個菜單項。 很好,但我實際上想要更多。 我還希望能夠有一個菜單項,其中一個集合項包含兩個或三個子項。 這是一些粗略的草圖:

What I Have         What I Want
+ First Item        + Create First Item
+ Second Item       + Second Item
                      + Delete
                      + Update

在這里,“第一項”具有屬性Exists = false ,但“第二項”具有true 我當前的代碼:

public class CollectionItem
{
    public string Name { get; set; }
    public bool Exists { get; set; }
}

public partial class MainWindow : Window
{
    ObservableCollection<CollectionItem> items;

    public MainWindow()
    {
        items = new ObservableCollection<CollectionItem>();
        items.Add(new CollectionItem() { Name = "First Item", Exists = false });
        items.Add(new CollectionItem() { Name = "Second Item", Exists = true });
        AllItems.ItemsSource = items;
    }
}

<MenuItem x:Name="AllItems" Header="What I Have">
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Header" Value="{Binding Path=Name}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

如何將簡單菜單項與子項混合?

如何將簡單菜單項與子項混合?

首先,您需要對數據進行適當的結構化,並具有代表子項或sub MenuItem的集合屬性。 然后,您需要使用MenuItem.ItemContainerStyle將集合屬性數據綁定到父MenuItemItemsSource屬性,類似於您現在正在做的事情。 您應該以如下形式結束:

public class CollectionItem
{
    public string Name { get; set; }
    public bool Exists { get; set; }
    public ObservableCollection<CollectionItem> CollectionOfSubItems { get; set; }
}

...

<MenuItem x:Name="AllItems" Header="What I Have">
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Header" Value="{Binding Path=Name}" />
            <Setter Property="ItemsSource" Value="{Binding CollectionOfSubItems}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

暫無
暫無

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

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