C# 绑定到集合的菜单仅显示第一个元素

C# 绑定到集合的菜单仅显示第一个元素,c#,wpf,data-binding,dockpanel,C#,Wpf,Data Binding,Dockpanel,我正在尝试将ObservableCollection绑定到DockPanel ItemsControl。我希望能够通过数据绑定控制DockPanel中的菜单项。我的方法似乎有点奏效,但是,它只显示了第一个元素“DockItems”。这是我的密码 <ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding DockItems}"> <ItemsControl.ItemTemplate>

我正在尝试将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并将其绑定到ViewModel,将ObservableCollection作为属性来实现我想要的行为。我不知道为什么我需要这个额外的层来让事情正常工作,尽管我更喜欢这种方法

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