Wpf 当其他菜单项被数据绑定到mvvm中的集合时添加静态菜单项

Wpf 当其他菜单项被数据绑定到mvvm中的集合时添加静态菜单项,wpf,mvvm,menu,contextmenu,menu-items,Wpf,Mvvm,Menu,Contextmenu,Menu Items,我有一个名为“Authors”的菜单项,其ItemsSource绑定到一个名为CollectionOuthors的可观察集合。单击“作者”将打开作者姓名列表。对于每个作者姓名,将显示书籍列表。我需要做哪些修改才能显示静态菜单项“创建新书”以及每个AuthorName下的其他书籍列表 像这样: 作者-->AuthorName1-->创建新书,第1册,第2册,第3册 以下是我现有的代码: MainWindow.xaml <MenuItem Header="Authors" ItemsSourc

我有一个名为“Authors”的菜单项,其ItemsSource绑定到一个名为CollectionOuthors的可观察集合。单击“作者”将打开作者姓名列表。对于每个作者姓名,将显示书籍列表。我需要做哪些修改才能显示静态菜单项“创建新书”以及每个AuthorName下的其他书籍列表

像这样: 作者-->AuthorName1-->创建新书,第1册,第2册,第3册

以下是我现有的代码:

MainWindow.xaml

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

MainWindowViewModel.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); }
    }
}



 public class BookDetails
   {
     public string BookName{get; set;}          
   }
private observeCollection\u collectionofuthors;
公众可观测集合
{
获取{return\u collectionofuthors;}
集合{SetProperty(ref _collectionofuthors,value);}
}
公共类作者
{
公共字符串AuthorName{get;set;}
私人可观察收集书籍;
公开收集书籍
{
获取{return\u Books;}
集合{SetProperty(参考书籍,值);}
}
}
公共类书籍详情
{
公共字符串BookName{get;set;}
}

您的问题没有三行解决方案,您可以:1)创建自己的面板,在底部添加“创建书本”,2)创建自己的IEnumerable,派生自Observable Collection,它将返回您的项目+当Collection过期时返回静态项目“创建书本”3)您可以尝试为MenuItem->Childs中的最后一个项目创建自定义样式(你可以发现如果最后一个被
{Binding RelativeSource={RelativeSource PreviousData}}}
设置为空,在这种风格下你可以添加普通的菜单项+按钮“Create book”4)你可以试着编写你自己的菜单项,在有孩子的面板下总是会添加“Create book”菜单项