ComboBox Selected Value - 匹配字符串的值
ComboBox Selected Value - value that matches string
如何以编程方式在C# UWP 中设置ComboBox 的SelectedValue 或SelectedItem?
我有一个 ComboBox 绑定到字符串列表,我希望它自动 select 与其他列表中的字符串匹配的字符串。
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());
这完全取决于您使用 ComboBox
控件的实际 ItemsSource
。
如果您设置 ComboBox1.ItemsSource = productsList;
每个项目都是 Products
类型(我建议将其重命名为 Product
因为它令人困惑,因为实例代表一个产品,而不是多个) 并且您必须将 SelectedItem
设置为您想要的产品 select:
ComboBox1.SelectedItem = productsList[2]; //select the third item
您还可以设置应 selected 的索引:
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 扩展方法,在本例中 returns IEnumerable<T>
IEnumerable<Products>
。原因是 Where
可能 return 多个结果。如果你想让这个工作,你必须在分号前附加 .FirstOrDefault()
以仅取第一个结果。无论如何,您的目标是将 SelectedItem
属性 设置为单个“Products
”的实例(同样,名称会更好 Product
:-) )
您可以使用的解决方案是:
SelectedItem = listBoundToComboBox.FirstOrDefault( p => some condition );
如何以编程方式在C# UWP 中设置ComboBox 的SelectedValue 或SelectedItem? 我有一个 ComboBox 绑定到字符串列表,我希望它自动 select 与其他列表中的字符串匹配的字符串。
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());
这完全取决于您使用 ComboBox
控件的实际 ItemsSource
。
如果您设置 ComboBox1.ItemsSource = productsList;
每个项目都是 Products
类型(我建议将其重命名为 Product
因为它令人困惑,因为实例代表一个产品,而不是多个) 并且您必须将 SelectedItem
设置为您想要的产品 select:
ComboBox1.SelectedItem = productsList[2]; //select the third item
您还可以设置应 selected 的索引:
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 扩展方法,在本例中 returns IEnumerable<T>
IEnumerable<Products>
。原因是 Where
可能 return 多个结果。如果你想让这个工作,你必须在分号前附加 .FirstOrDefault()
以仅取第一个结果。无论如何,您的目标是将 SelectedItem
属性 设置为单个“Products
”的实例(同样,名称会更好 Product
:-) )
您可以使用的解决方案是:
SelectedItem = listBoundToComboBox.FirstOrDefault( p => some condition );