代码之家  ›  专栏  ›  技术社区  ›  Orion Edwards

显示数据绑定wpf组合框的默认值

  •  22
  • Orion Edwards  · 技术社区  · 15 年前

    我有一个数据绑定的wpf comboxbox,我正在使用 SelectedValuePath 属性根据对象文本以外的内容选择选定值。最好用一个例子来解释:

    <ComboBox ItemsSource="{Binding Path=Items}"
              DisplayMemberPath="Name"
              SelectedValuePath="Id"
              SelectedValue="{Binding Path=SelectedItemId}"/>
    

    此对象的数据上下文如下所示:

    DataContext = new MyDataContext
    {
        Items = {
            new DataItem{ Name = "Jim", Id = 1 },
            new DataItem{ Name = "Bob", Id = 2 },
        },
        SelectedItemId = -1,
    };
    

    当我显示预填充的数据时,这一切都很好,其中 SelectedItemId 匹配有效的 Item.Id .

    问题是,在 新项目 案例,其中 选择编辑ID 是未知的。wpf所做的是将组合框显示为空。 我不想要这个 . 我想禁止组合框中的空白项;我想让它显示列表中的第一个项。

    这可能吗?我可以编写一些代码来显式地设置 选择编辑ID 但由于ui的一个缺点,改变我的数据模型似乎是不对的。

    2 回复  |  直到 13 年前
        1
  •  9
  •   Ben Collier    15 年前

    我想你得在这里做些手工工作才能有这种行为。当您第一次显示组合框时,无论selecteditemid是否匹配,都可以签入代码隐藏,然后基于此更改所选索引。或者如果您知道当没有对应的项时selecteditemid将始终为-1,则可以使用datatrigger。

    方法1:

    if (!DataContext.Items.Exists(l => l.Id == DataContext.SelectedItemId))
    {
        MyComboBox.SelectedIndex = 0;  //this selects the first item in the list
    }
    

    方法2:

    <Style TargetType="ComboBox">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=SelectedItemId}" Value="-1">
                <Setter Property="SelectedIndex" Value="0"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    
        2
  •  4
  •   MBDevelop    13 年前

    可以使用此样式触发器:如果selecteditem为空, 选择第一个元素。

    <Trigger Property="SelectedItem" Value="{x:Null}">
        <Setter Property="SelectedIndex" Value="0"/>
    </Trigger>