Combobox包含一个空项

时间:2015-05-05 16:58:10

标签: c# wpf combobox

我有一个组合框

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

2 个答案:

答案 0 :(得分:2)

我终于弄清楚了,这让我发疯了......这是&#34;空的原因&#34;条目是我对DataGrid使用相同的绑定。 此绑定添加&#34; NewItemPlaceholder&#34; 。疯狂,这会影响ComboBox,真的很疯狂..对我来说绝对意外,在我看来,设计糟糕。

解决方案是为Combox和DataGrid使用两个不同的ObservableCollections,或者将DataGrid的CanUserAddRows属性设置为&#34; False&#34;。就那么简单。疯。

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

答案 1 :(得分:0)

不确定这是否导致问题,但你仍然应该解决它

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

SelectedItem

SelectedValue