我在 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
已正确填充,但未设置其初始值。
我的问题是,如何将 ComboBox
的 SelectedValue
设置为员工的适当属性?
编辑: 这是我的可观察集合(片段)。
ObservableCollection<Employee> emps = new ObservableCollection<Employee>
{
new Employee{Name = "Exam Pell", Title = "Manager", Phone = "(801) 555-2677", Email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="65001d04083500090925060a4b060a" rel="noreferrer noopener nofollow">[email protected]</a>", isActive = true, Dept = Department.Commission},
};
这是我的静态资源:
<ObjectDataProvider x:Key="Depts" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="en:department+Department"></x:Type>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
我实际上注意到,每当我尝试设置 SelectedValue 或 SelectedItem 时,组合框就会变成红色(我有一个 DataGridComboBoxColumn
也与此相关,但有一个 ItemsSource
)。另外,我有一个也显示部门的 ListBox
- 然而,这个显示正确,但即使我更改任何员工的 ComboBox
选择也不会更新。
最佳答案
不要设置SelectedValue
而是设置SelectedItem
。
要设置SelectedValue
,您需要设置DisplayMemberPath
和ValueMemberPath
。在你的情况下,因为它是一个枚举,你无法设置它们。
所以像这样设置SelectedItem
<ComboBox x:Name="Form1Combobox"
Width="150"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding Dept}"
ItemsSource="{Binding Source={StaticResource ResourceKey=Depts}}"/>
关于C# - 来自枚举的 WPF ComboBox SelectedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782439/