我有一个WPF ComboBox绑定到包含枚举的类列表。
这一切都很好,我的问题是在这篇文章的最后,首先是代码:
这是班级:
public class FILTER_TEST
{
public FilterType Filter { get; private set; }
public string Description { get; private set; }
public static List<FILTER_TEST> CreateFilters()
{
var list = new List<FILTER_TEST>();
list.Add(new FILTER_TEST() { Filter = FilterType.CheckNone, Description = "Uncheck all" });
list.Add(new FILTER_TEST() { Filter = FilterType.CheckAll, Description = "Check all" });
list.Add(new FILTER_TEST() { Filter = FilterType.CheckCustom, Description = "Custom check" });
return list;
}
}
这是枚举FilterType:
public enum FilterType
{
CheckNone,
CheckAll,
CheckCustom
}
在我的视图模型中,我有以下内容:
public List<FILTER_TEST> FilterNames { get { return FILTER_TEST.CreateFilters(); } }
public FILTER_TEST SelectedFilter
{
get { return selectedFilter; }
set
{
if (value != selectedFilter)
{
selectedFilter = value;
OnPropertyChanged("SelectedFilter");
}
}
}
同样在视图模型中,我按如下方式设置ComboBox的SelectedItem:
SelectedFilter = FilterNames.Where(x => x.Filter == FilterType.CheckNone).FirstOrDefault();
以下是将所有内容放在一起的xaml:
<ComboBox DisplayMemberPath="Description" ItemsSource="{Binding FilterNames}"
SelectedItem="{Binding SelectedFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True"/>
我的问题是虽然SelectionItem的更改有效,但ComboBox中显示的实际值不会改变。
初始SelectedItem是“Uncheck all”,因为当加载窗口时,没有检查到任何相应的CheckBox控件(绑定到包含Boolean属性的另一个类)。我想要的是,当检查CheckBox时,SelectedItem会变为“自定义检查”。
这确实改变了SelectedItem的值:
SelectedFilter = FilterNames.Where(x => x.Filter == FilterType.CheckCustom).FirstOrDefault();
但ComboBox中显示的文字仍然是“取消全部检查”。
有没有人知道我错过了什么?我被迫使用4.0框架,我不知道这是否相关。
答案 0 :(得分:1)
我已经看到提示覆盖正在使用的Equals()
类型:
public override bool Equals(object o)
{
if (o is FILTER_TEST)
{
var other = o as FILTER_TEST;
return this.Description == other.Description && this.Filter == other.Filter;
}
else
return false;
}
现在,这使您的样本工作。让我回来参考 why 。