我在XAML中有一个ComboBox
:
<ComboBox x:Name="Form1Combobox" Width="150" IsSynchronizedWithCurrentItem="True" SelectedValue="{Binding Dept}" ItemsSource="{Binding Source={StaticResource ResourceKey=Depts}}"/>
我的静态资源正在使用ObjectDataProvider
使用枚举值填充ComboBox
:
public enum Department
{
Leadership,
Maintenance,
Salaried,
Commission
}
我有ObservableCollection
名员工,我将他们的Dept属性设置为某些内容(例如Dept = Department.Leadership
)。员工类使用INotifyPropertyChange
,包括名称在内的其他内容。 ComboBox
正确填充,但未设置初始值。
我的问题是,如何将SelectedValue
的{{1}}设置为员工的相应财产?
编辑: 这是我的可观察集合(片段)。
ComboBox
这是我的静态资源:
ObservableCollection<Employee> emps = new ObservableCollection<Employee>
{
new Employee{Name = "Exam Pell", Title = "Manager", Phone = "(801) 555-2677", Email = "examPell@co.co", isActive = true, Dept = Department.Commission},
};
我实际上已经注意到,每当我尝试设置SelectedValue或SelectedItem时,组合框变为红色(我有一个<ObjectDataProvider x:Key="Depts" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="en:department+Department"></x:Type>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
也与此相关,但有一个DataGridComboBoxColumn
)。此外,我有ItemsSource
也显示部门 - 但是,这个显示正确,但即使我更改任何员工的ListBox
选择,也不会更新。
答案 0 :(得分:3)
而不是设置SelectedValue
设置SelectedItem
。
要设置SelectedValue
,您需要设置DisplayMemberPath
和ValueMemberPath
。在你的情况下,因为你的Enum你不能设置它们。
所以设置SelectedItem
就像这样
<ComboBox x:Name="Form1Combobox"
Width="150"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding Dept}"
ItemsSource="{Binding Source={StaticResource ResourceKey=Depts}}"/>