【问题标题】:Binding combobox inside listview to a collection将列表视图内的组合框绑定到集合
【发布时间】:2012-08-23 23:31:36
【问题描述】:

这是我的对象模型

private class ShellItem
{
    public string Name { get; set; }

    public string Command { get; set; }

    public List<ShellMenu> ShellMenus { get; private set; }

    public ShellItem()
    {
        ShellMenus = new List<ShellMenu>();
    }
}


public class ShellMenu
{
    public string ExtName;

    public string KeyName;

    public string FileType;

    public string MenuName { get; set; }

    public string Command { get; set; }

}

这是我的 xaml。

<ListView Name="listViewRightClick" HorizontalAlignment="Stretch" Height="Auto" Margin="10,10,26.667,107.667" VerticalAlignment="Stretch" Width="Auto">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="200" Header="Name" DisplayMemberBinding="{Binding Name}"/>
                    <GridViewColumn Width="600" Header="Command" DisplayMemberBinding="{Binding Command}"/>
                    <GridViewColumn Width="200" Header="FileTypes">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding ShellMenus}"
                                          SelectedValue="{Binding MenuName}"
                                          Margin="-6, 0, -6, 0"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

我的问题不是显示 shellMenu 的 MenuName,而是在组合框的每个项目上显示 MyNamespace.ShellMenu。

【问题讨论】:

标签: c# wpf xaml listview combobox


【解决方案1】:

SelectedValue 仅用于选择,使用DisplayMemberPath 进行显示。

DisplayMemberPath="MenuName"

【讨论】:

  • @RaviPatel:您是否指定了绑定?这只是一个成员名。
  • 它现在可以工作了,但是为什么我们不像 DisplayMemberPath="Binding MenuName" 那样称呼它。这是我使用 wpf 的第一天。
  • @RaviPatel:因为这正是该属性的实现方式,所以它甚至在名称中说它是一个 memberpath,请阅读如果您不知道属性是如何工作的,请提供文档。
  • 是否可以在组合框中添加一个默认选中的默认值?
  • @RaviPatel:这是不同的问题,可能也已经回答了。看看周围而不是问我。
【解决方案2】:

您需要在ComboBox 中指定DisplayMemberPath

<ComboBox 
    ItemsSource="{Binding ShellMenus}"
    SelectedValue="{Binding MenuName}"
    DisplayMemberPath="MenuName"
    Margin="-6, 0, -6, 0"/> 

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多