我有一个组合框
<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(
答案 0 :(得分:2)
我终于弄清楚了,这让我发疯了......这是&#34;空的原因&#34;条目是我对DataGrid使用相同的绑定。 此绑定添加&#34; NewItemPlaceholder&#34; 。疯狂,这会影响ComboBox,真的很疯狂..对我来说绝对意外,在我看来,设计糟糕。
解决方案是为Combox和DataGrid使用两个不同的ObservableCollections,或者将DataGrid的CanUserAddRows属性设置为&#34; False&#34;。就那么简单。疯。
答案 1 :(得分:0)
不确定这是否导致问题,但你仍然应该解决它
您应该绑定到SelectedItem而不是SelectedValue 您甚至没有定义SelectedValuePath。