在组合框中设置 SelectedItem
Posted
技术标签:
【中文标题】在组合框中设置 SelectedItem【英文标题】:Set SelectedItem in a ComboBox 【发布时间】:2021-09-12 11:05:35 【问题描述】:我试图在 ComboBox 中设置 SelectedItem 但没有任何成功。
如您在上面的屏幕截图中所见,它显示了产品列表中的第一条记录。
这是 XAML:
<ComboBox Grid.Column="1"
Grid.Row="0"
ItemsSource="Binding Products"
SelectedItem="Binding SelectedProduct, Mode=TwoWay"
IsSynchronizedWithCurrentItem="True"
IsEditable="True"
DisplayMemberPath="ProductName"
SelectedValuePath="Id"
Width="200"
Height="30"
VerticalContentAlignment="Center"
Margin="10 0 0 20" />
视图模型:
public Product SelectedProduct
get => _selectedProduct;
set => Set(ref _selectedProduct, value);
我在这里设置了 SelectedProduct :
private void OrderUserControl(Order order)
ShowOrderUserControl = Visibility.Visible;
Products = _productService.GetProducts();
if (order == null)
Order = new Order();
OrderUserControlTitle = "Nieuwe bestelling toevoegen";
else
Order = order;
SelectedProduct = _productService.GetProductById(Order.ProductId);
OrderUserControlTitle = "Bestelling aanpassen";
有什么想法吗?
【问题讨论】:
当 Product 没有覆盖 Equals 方法时,您必须确保从 SelectedProduct 返回的对象是 Products 集合的一个元素。 除此之外,设置 SelectedValuePath 是没有意义的,除非您还绑定 SelectedValue - 而不是 SelectedItem。 【参考方案1】:假设您的 Product
类有一个 Id
属性,
您可以像这样使用 linq 获取您的 SelectedProduct
,而不是再次使用您的服务:
SelectedProduct = Products.Find(p => p.Id == Order.ProductId);
它确保您选择的产品是您Products
列表的一部分
【讨论】:
或者(假设 Order 是具有更改通知的属性)您绑定SelectedValue="Binding Order.ProductId"
而不是绑定 SelectedItem。
成功了,但为什么它不能与我的服务一起使用?它还返回一个 Product 对象。 @Clemens 我也会试试的。
查看我对这个问题的评论:“确保从 SelectedProduct 返回的对象是 Products 集合的元素” - 即不是 新的 集合中未包含的产品。以上是关于在组合框中设置 SelectedItem的主要内容,如果未能解决你的问题,请参考以下文章
如何在具有嵌套数据的网格中设置组合框值? Extjs 4.2 Mvc