【问题标题】:Menu bound to collection only shows first element绑定到集合的菜单仅显示第一个元素
【发布时间】:2015-09-12 17:20:05
【问题描述】:

我正在尝试将 ObservableCollection 绑定到 DockPanel ItemsControl。我希望能够通过数据绑定来控制 DockPanel 中的 MenuItems。我的方法似乎有点奏效,但是,它只显示第一个元素“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>

【问题讨论】:

    标签: c# wpf data-binding dockpanel


    【解决方案1】:

    我能够通过添加一个 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>
    

    【讨论】:

      【解决方案2】:

      完全不清楚您要在这里做什么。您正在创建一个 ItemsControl,因此将为列表中的每个元素创建一个完全独立的菜单。每个菜单都有一个“文件”项,下面有一个列表项。没有意义。

      Menu 和 MenuItem 都有一个 ItemsSource,我怀疑你实际上想要做的是:

      <Menu>
          <MenuItem Header="File" ItemsSource="{Binding DockItems}" DisplayMemberPath="Name"/>
      </Menu>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 2016-02-17
        相关资源
        最近更新 更多