1
我有一个组合框和xaml中硬编码的comboboxitems,我尝试基于字符串值以编程方式设置组合框的值。根据内容将ComBox设置为ComboBoxItem
XAML:即不使用ComboBoxItems的时候我通常会使用
<ComboBox Name="comboCondition">
<ComboBoxItem>Item 1</ComboBoxItem>
<ComboBoxItem>Item 2</ComboBoxItem
</ComboBox>
代码:
comboConditionValue.SelectedItem = "Item 1";
当然,当组合框包含ComboBoxItems而不是被绑定到一个列表,这并不工作。我能够找到正确的值是这样的:
foreach (var item in comboCondition.Items)
{
if ((item as ComboBoxItem).Content.ToString() == "Item 1")
comboCondition.SelectedItem = item;
}
这是设置值的混乱和缓慢的方式,没有人知道任何更简单的方法,我可以设置正确的ComboBoxItem无需经过完整列表循环?
'comboCondition.Items.IndexOf(“Item 1”)''null'(是“Item 1”存在于Items集合中。我认为IndexOf会期望ComboBoxItem类型的对象,而不是字符串。我不得不承认我对ViewModel并不熟悉,并且宁愿避免为了这个小问题而实现一个,但我会做一些阅读,看看这个实现的优点是什么。如果你删除或编辑第二个解决方案,我可以接受你的答案 – Scotty
我刚刚学会了如何在我现有的类上实现'INotifyPropertyChanged',所以我已经以这种方式实现了你的第一个建议......第二个建议不起作用 – Scotty
啊是的,你对第二种选择是正确的。我没有完全检查代码,忽略了记住所需的对象。我想你可以使用类似于:comboCondition.Items.IndexOf(comboCondition.Items.FirstOrDefault(c => c.Text ==“Item 1”)),其中Text是保存显示值的属性。但是我很高兴你能够使用视图模型,也就是到目前为止,使用WPF时的首选方法。 – JasonWilczak