显示Databound WPF ComboBox的默认值

我有一个数据绑定WPF comboxbox,我使用SelectedValuePath属性根据对象的文本以外的东西选择一个选定的值。 这可能是最好用一个例子解释的:

  

这个东西的datacontext看起来像这样:

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

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

问题是,在新项目案例中, SelectedItemId未知。 WPF所做的是将combobox显示为空白。 我不想要这个 。 我想禁止combobox中的空白项; 我希望它显示列表中的第一项。

这可能吗? 我可以编写一些代码来明确地预先设置SelectedItemId ,但由于UI的缺点,我不得不改变我的数据模型。

我认为你将不得不在这里做一些手工工作来获得这种行为。 无论SelectedItemId是否匹配,您可以在首次显示ComboBox时检入代码,然后根据该代码更改所选索引。 或者,如果您知道如果没有相应的项目,SelectedItemId将始终为-1,则可以使用数据触发器。

方法1:

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

方法2:

  

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