代码之家  ›  专栏  ›  技术社区  ›  DotNetSpartan

在wpf mvvm数据绑定菜单项中添加额外级别

  •  0
  • DotNetSpartan  · 技术社区  · 8 年前

    我有一个名为“authors”的菜单项 ItemsSource 与 ObservableCollection 打电话 CollectionOfAuthors 是的。点击 作者 打开作者姓名列表。我需要做什么修改来添加一个额外级别的菜单项,简单地说,我希望显示每个作者姓名的书籍列表。

    这样地:

    Author
     |__AuthorName 1
        |__Book 1
        |__Book 2
    

    这是我现有的代码:

    主窗口

    <MenuItem Header="Authors" ItemsSource="{Binding CollectionOfAuthors}">
        <MenuItem.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding AuthorName}" />                                    
            </DataTemplate>
        </MenuItem.ItemTemplate>
    </MenuItem>
    

    主窗口视图model.cs

    private ObservableCollection<Author> _collectionOfAuthors;
    
    public ObservableCollection<Author> CollectionOfAuthors
    {
        get { return _collectionOfAuthors; }
        set { SetProperty(ref _collectionOfAuthors, value); }
    }
    
    public class Author
    {
       public string AuthorName {get; set;}
    
       private ObservableCollection<BookDetails> _Books;
    
       public ObservableCollection<BookDetails> Books
       {
           get { return _Books; }
           set { SetProperty(ref _Books, value); }
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   dhilmathy    8 年前

    使用 HierarchicalDataTemplate 为了这个。

    <MenuItem Header="Authors" ItemsSource="{Binding CollectionOfAuthors}">
        <MenuItem.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=Books}">
                <TextBlock Text="{Binding AuthorName}"/>
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding BookName}"/>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </MenuItem.ItemTemplate>
    </MenuItem>