![](/img/trans.png)
[英]How can I set the initial SelectedItem for a ComboBox bound to an enum, to a Value of an object containing that enum?
[英]Set initial value in Combobox bound to CollectionViewSource
我正在使用 WPF 和 MVVM 模式。 所有绑定到列表的组合框都可以正常工作,但我有一个使用CollectionViewSource
进行过滤的级联下拉列表。 过滤有效,setter 也有效(在搜索答案时,我看到另一个人遇到了麻烦),但我无法设置初始值。 我尝试了几种方法,但似乎都没有影响所选项目。
Viewmodel ctor 和 Property setter(_ticket.SelectedSubstatus 在 model 构造函数中设置):
public TicketViewModel()
{
_ticket = new TicketModel();
SubstatusList = CollectionViewSource.GetDefaultView(GetStatusList());
SubstatusList.Filter = (x) => { return (int)(x as Substatus).IST_MAIN_STATUS == (int)SelectedStatus.IST_STATUS_ID; };
SubstatusList.MoveCurrentTo(_ticket.SelectedSubstatus);
SelectedSubstatus = _ticket.SelectedSubstatus;
Substatus test = (Substatus)SubstatusList.CurrentItem;
}
public Substatus SelectedSubstatus
{
get { return _ticket.SelectedSubstatus; }
set
{
if (value == _ticket.SelectedSubstatus ||value == null)
return;
_ticket.SelectedSubstatus = value;
_ticket.Issue.IS_SUBSTATUS_ID = value.IST_SUBSTATUS_ID;
base.OnPropertyChanged("SelectedSubstatus");
}
}
这是 combobox 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"/>
CollectionViewSource
中的当前项目是 null 刚刚被 MoveCurrentTo() 设置后,并通过测试检查。 我究竟做错了什么?
默认情况下,检查对象是否通过引用而不是值相等。
因此,如果_ticket.SelectedSubstatus
不直接引用SubstatusList
中的项目,则SelectedSubstatus
将为 NULL 因为您尝试将SelectedSubstatus
设置为等于SubstatusList
中不存在的项目
为了解决这个问题,如果对象的数据相同,请覆盖 Substatus 的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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.