C# 将ComboBox绑定到CollectionViewSource的正确方法

C# 将ComboBox绑定到CollectionViewSource的正确方法,c#,wpf,collectionviewsource,C#,Wpf,Collectionviewsource,嘿,我的ViewModel上有一个CollectionViewSource属性 此ViewModel通过以下方式绑定到组合框: <ComboBox ItemsSource="{Binding Products.View}" SelectedItem="{Binding SelectedEntity.Product}" IsSynchronizedWithCurrentItem="True"/> 当绑定到现有SelectedEntity时,它可以正常工作 当我尝试绑定到

嘿,我的ViewModel上有一个CollectionViewSource属性

此ViewModel通过以下方式绑定到组合框:

<ComboBox   ItemsSource="{Binding Products.View}" 
SelectedItem="{Binding SelectedEntity.Product}"  
IsSynchronizedWithCurrentItem="True"/>

当绑定到现有SelectedEntity时,它可以正常工作

当我尝试绑定到一个
SelectedEntity
时,该属性没有产品,我想显示列表中的第一项。因此,我尝试使用
Products.View.MoveCurrentToFirst()
,但仍然没有显示第一项

当然,当我设置
SelectedEntity.Product=Products.View.CurrentItem.


我能做些什么来改进我的代码?这在我看来有些错误…

WPF中的SelectedItem选择整个实例,因此如果您将SelectedItem绑定到实体的导航属性,那么一切都很好。但是,如果要将SelectedItem绑定到实体的非导航属性,那么这可能是一个问题,如果这是业务需求,我建议您改为绑定SelectedValue

对我来说,我发现最好将SelectedItem绑定到实体的导航属性,将SelectedValue绑定到实体的value属性


我希望这有帮助。

需要更多信息:“不拥有产品”-这是否意味着产品为空或产品属性不存在?或者两者都有?你在哪里叫MoveCurrentToFirst?您在哪里调用对CurrentItem的赋值?产品为空。我在ViewModelCollectionViewSource的构造函数中调用赋值,可以在xaml中定义,并绑定到ViewModel上的集合,然后可以将ItemsControl(组合框)的ItemsSource绑定到CollectionViewSource。CollectionViewSource是视图的一部分。为什么还要绑定到SelectedItem?如果需要处理选择更改,可以从视图中侦听当前项中的更改,例如Products.view.CurrentChanged+=YourHandler。否则,如果您的SelectedEntity更改(无论是什么),则可以使用Products.View.MoveCurrentTo(对象)在组合框中设置所选项目。我认为对MoveCurrentToFirst的调用不起作用的原因是您绑定了combobox的SelectedItem属性,从而阻止了所选项目的更改。IsSynchronizedWithCurrentItem我认为主要用于将ItemsSource绑定到ICollectionView(您正在这样做)然后,您可以通过向ICollectionView.CurrentChanged/CurrentChanged添加eventhandler来侦听ICollectionView中当前项的更改。