【发布时间】:2016-03-25 00:08:34
【问题描述】:
我有一个 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 控件(绑定到另一个包含布尔属性的类)被选中。我想要的是,当 CheckBox 被选中时,SelectedItem 更改为“自定义检查”。
这确实改变了 SelectedItem 的值:
SelectedFilter = FilterNames.Where(x => x.Filter == FilterType.CheckCustom).FirstOrDefault();
但是 ComboBox 中显示的文本仍然是“Uncheck all”。
有人知道我缺少什么吗?强制使用4.0框架,不知道有没有关系。
【问题讨论】: