C# 在绑定到CollectionViewSource的组合框中设置初始值

C# 在绑定到CollectionViewSource的组合框中设置初始值,c#,wpf,mvvm,combobox,collectionviewsource,C#,Wpf,Mvvm,Combobox,Collectionviewsource,我正在使用WPF和MVVM模式。所有绑定到列表的组合框都可以正常工作,但我有一个级联下拉列表,它使用CollectionViewSource进行过滤。过滤和setter一样有效(在搜索答案时,我看到另一个人有问题),但我无法设置初始值。我尝试过几种方法,但似乎都不会影响selecteditem Viewmodel构造函数和属性setter(\u ticket.SelectedSubstatus在模型构造函数中设置): 这是组合框XAML <ComboBox HorizontalAlignm

我正在使用WPF和MVVM模式。所有绑定到列表的组合框都可以正常工作,但我有一个级联下拉列表,它使用
CollectionViewSource
进行过滤。过滤和setter一样有效(在搜索答案时,我看到另一个人有问题),但我无法设置初始值。我尝试过几种方法,但似乎都不会影响selecteditem

Viewmodel构造函数和属性setter(\u ticket.SelectedSubstatus在模型构造函数中设置):

这是组合框XAML

<ComboBox HorizontalAlignment="Stretch" Margin="15,0,0,0"
                                  Name="comboBox1" VerticalAlignment="Bottom" 
                                  Grid.Column="2" Grid.Row="1" FontSize="12" 
                                  IsSynchronizedWithCurrentItem="True"
                                  ItemsSource="{Binding Path=SubstatusList}" 
                                  SelectedItem="{Binding Path=SelectedSubstatus, Mode=TwoWay}" 
                                  DisplayMemberPath="IST_NAME"/>


仅在MoveCurrentTo()设置并通过test检查后,
CollectionViewSource
中的当前项为空。我做错了什么?

默认情况下,检查对象是否通过引用而不是值相等

因此,如果
\u ticket.SelectedSubstatus
未直接引用
子状态列表中的项目,则
SelectedSubstatus
将为空,因为您试图将
SelectedSubstatus
设置为与
子状态列表中不存在的项目相等

若要解决此问题,请覆盖
Substatus
.Equals()
方法,以便在对象的数据相同时返回true。比如说,

public override bool Equals(object obj)
{
      if (obj == null) return false;
      if (obj.GetType() != this.GetType()) return false;

      return this.Id == ((SubStatus)obj).Id;
 }

你把它倒过来了。
SelectedSubstatus
不为空,在下拉列表中进行选择可正确更新
SelectedSubstatus
。虽然我认为这是有道理的,但是如果
SubstatusList.MoveCurrentTo(_ticket.SelectedSubstatus)
子状态列表中找不到对象,它不会设置它。如何在SubstatusList中设置CurrentItem?此外,Substatus是EF4对象。我尝试将该重写放置在分部类中,但
ID
不是有效的属性。我在Intellisense中没有看到任何可以工作的内容。如果数据相同,请覆盖
子状态
类中的
Equals()
,以返回true。现在,只有当内存中的引用相同时,才会返回true。Id属性就是一个例子。我尝试使用
Substatus
对象的属性,EF对象的PK,我得到编译错误,说它不包含该属性的定义。我可以在代码中的其他地方访问该属性,但即使在强制转换的对象上,它也不允许我访问。Nvm,我显然有两个类
Substatus
Substatus
,并且在错误的类上进行了分部。不知道为什么我有两个。
public override bool Equals(object obj)
{
      if (obj == null) return false;
      if (obj.GetType() != this.GetType()) return false;

      return this.Id == ((SubStatus)obj).Id;
 }