【问题标题】:Combobox contains an empty item [duplicate]组合框包含一个空项目[重复]
【发布时间】:2015-05-05 16:58:09
【问题描述】:

我有一个组合框

<ComboBox ItemsSource="{Binding MyItems}" 
          DisplayMemberPath="DisplayedName" 
          SelectedValue="{Binding MySelectedItem}"/>

奇怪的是,当我打开组合框时,最后一个位置有一个空白的空项目。这是为什么?最后一个空条目也是可选择的。我绑定的集合不包含空条目。它包含例如4 个项目,但组合框有 5 个。

编辑:

我的 ViewModel 中的属性:

public ObservableCollection<MyItem> MyItems { get; set; }
private MyItem mySelectedItem { get; set; }
public MyItem MySelectedItem {
    get { return mySelectedItem }
    set { 
             mySelectedItem = value;
             RaisePropertyChanged(() => MySelectedItem);
         }
}

我将MyItems 设置为可用项目的集合:

MyItems = AvailableItems();
...
public ObservableCollection<MyItem> AvailableItems()
{
    return new ObservableCollection<MyItem>()
    {
        new MyItem() {DisplayedName = "ItemNameIMadeUp1"},
        new MyItem() {DisplayedName = "ItemNameIMadeUp2"}
    };
}

我将某个项目定义为选定项目:

MySelectedItem = MyItems[0];

EDIT2 我发现“空”项目是 NewItemPlaceholder。我还没有发现如何删除它,甚至为什么将它添加到 ObservableCollection 中:o(

【问题讨论】:

  • 考虑展示收藏代码
  • 一个 ObservableCollection 没有 SelectedItem 属性,那么您希望{Binding MyItems.SelectedItem} 提供什么?
  • 我在 ObservableCollection 绑定到数据网格时发生了这种情况,并且框架添加了新的项目占位符。然后将相同的 ObservableCollection 绑定到组合框也确实在底部显示了空项。
  • @Clemens,你是对的,当然,我应该复制并粘贴代码。我已经纠正了错字。
  • 您是否尝试使用selectedIndex=0 而不是 selectedValue?我没有得到占位符然后我做到了

标签: c# wpf combobox


【解决方案1】:

我终于想通了,这让我发疯了。“空”条目的原因是我对 DataGrid 使用了相同的绑定。 此绑定添加了“NewItemPlaceholder”。太疯狂了,这会影响 ComboBox,真的太疯狂了.. 对我来说绝对是出乎意料的,在我看来,这是糟糕的设计。

解决方案是对 Combox 和 DataGrid 使用两个不同的 ObservableCollections,或者将 DataGrid 的 CanUserAddRows-property 设置为“False”。就那么简单。疯狂的。

Herehere 我找到了一些有用的帮助。

【讨论】:

    【解决方案2】:

    不确定这是否是导致问题的原因,但您仍然应该修复它

    您应该绑定到 SelectedItem 而不是 SelectedValue。
    您甚至没有定义 SelectedValuePath。

    SelectedItem

    SelectedValue

    【讨论】:

    • 来投反对票。有什么问题?
    • 我不是反对者 ;o) 但我必须告诉你,更改为 SelectedItem 并没有改变任何东西,很遗憾。不过,为您 +1,感谢您的回复。
    • 你仍然应该解决这个问题。我认为它正在使用 SelectedItem 因为您没有定义 SelectedValuePath 。如果您定义 SelectedValuePath 它将失败 - 我测试过它确实失败了。
    猜你喜欢
    • 2015-05-15
    • 2017-09-02
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多