C# 在绑定到CollectionViewSource的组合框中设置初始值
我正在使用WPF和MVVM模式。所有绑定到列表的组合框都可以正常工作,但我有一个级联下拉列表,它使用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
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;
}