如何以编程方式在C#UWP中设置ComboBox的SelectedValue或SelectedItem?
我有一个ComboBox绑定到字符串列表,我希望它自动选择与其他列表中的字符串匹配的字符串。
ObservableCollection<Products> DB_Products = new ObservableCollection<Products>();
ReadAllProductsList dbproducts = new ReadAllProductsList();
DB_Products = dbproducts.GetAllProducts();
List<Products> productsList = new List<Products>();
productsList = DB_Products.ToList();
低于未知
ComboBox1.SelectedItem = productList[0].ProductName.ToString() ;
或类似的东西:
ComboBox1.SelectedItem = ComboBox.SelectedItem.Where(ComboBox => ComboBox.SelectedItem == productList[0].ProductName.ToString());
要么:
ComboBox1.SelectedItem = DB_SelectorList.Where(DB_SelectorList => DB_SelectorList.ProductName == productList[0].ProductName.ToString());
最佳答案
它仅取决于与ItemsSource
控件一起使用的实际ComboBox
。
如果设置ComboBox1.ItemsSource = productsList;
,则每个项目的类型均为Products
(我建议将其重命名为Product
,因为实例令人困惑,因为它代表一个产品,而不是多个产品),并且必须将SelectedItem
设置为产品您要选择:
ComboBox1.SelectedItem = productsList[2]; //select the third item
您还可以设置应选择的索引:
ComboBox1.SelectedIndex = 2; //select the third item
为什么您的方法不起作用
第一种方法
ComboBox1.SelectedItem = productList[0].ProductName.ToString();
在这里,您将
SelectedItem
设置为ProductName
,这是Products
项的属性,但是ComboBox
绑定到Products
列表,它不比较各个属性。第二和第三种方法
ComboBox1.SelectedItem = ComboBox.SelectedItem.Where(
ComboBox => ComboBox.SelectedItem == productList[0].ProductName.ToString());
//and
ComboBox1.SelectedItem = DB_SelectorList.Where(
DB_SelectorList => DB_SelectorList.ProductName == productList[0].ProductName.ToString());
这两个距离比较近,但还不是完整的解决方案。
Where
方法是LINQ扩展方法,在这种情况下,该方法返回IEnumerable<T>
。原因是IEnumerable<Products>
可能返回多个结果。如果要执行此操作,则必须在分号前附加Where
以仅获取第一个结果。无论如何,您的目标是将.FirstOrDefault()
属性设置为单个“ SelectedItem
”的实例(同样,名称最好是Products
:-))您可以使用的解决方案是:
SelectedItem = listBoundToComboBox.FirstOrDefault( p => some condition );
关于c# - ComboBox选定值-与字符串匹配的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49239434/