绑定到集合的菜单只显示第一个元素
本文关键字:显示 第一个 元素 菜单 集合 绑定 | 更新日期: 2023-09-27 18:12:25
我试图绑定一个ObservableCollection到DockPanel ItemsControl。我希望能够通过数据绑定来控制DockPanel中的菜单项。我的方法似乎有点工作,然而,它只显示第一个元素"DockItems"。这是我的代码,
<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding DockItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Menu>
<MenuItem Header="File">
<MenuItem Header="{Binding Name}"/>
</MenuItem>
</Menu>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我能够通过添加一个ContentControl并将其绑定到一个带有ObservableCollection作为属性的ViewModel来实现我想要的行为。我不确定为什么我需要这个额外的层来让事情工作,尽管我更喜欢这种方法。
<ContentControl Name="DockItemsContent" Content="{Binding DockItemsViewModel}">
<ContentControl.ContentTemplate>
<DataTemplate>
<DockPanel>
<Menu>
<MenuItem Header="File" ItemsSource="{Binding DockItems}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
</DockPanel>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
根本不清楚你在这里想做什么。您正在创建ItemsControl,因此将为列表中的每个元素创建一个完全独立的菜单。每个菜单都有一个"文件"项,下面有一个列表项。没道理。
菜单和菜单项都有一个ItemsSource,我怀疑你实际上想做的是:
<Menu>
<MenuItem Header="File" ItemsSource="{Binding DockItems}" DisplayMemberPath="Name"/>
</Menu>