【发布时间】:2017-07-25 10:11:55
【问题描述】:
我有一个名为“employee”的班级:
public string Forname { get; set; }
public string Lastname { get; set; }
public EmployeeGroup Group { get; set; }
一个类“EmployeeGroup”:
public string Groupname { get; set; }
public short GroupID { get; set; }
还有一个 wpf:
<ComboBox x:Name="cmbGroup" SelectedItem="{Binding Group}" HorizontalAlignment="Left" Margin="342,226,0,0" VerticalAlignment="Top" Width="129"/>
<TextBox x:Name="txtForename" Text="{Binding Forname}" HorizontalAlignment="Left" Height="24" Margin="342,21,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="129" VerticalContentAlignment="Center" GotFocus="SelectText"/>
<TextBox x:Name="txtLastname" Text="{Binding Lastname}" HorizontalAlignment="Left" Height="24" Margin="342,47,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="129" VerticalContentAlignment="Center" GotFocus="SelectText"/>
<ListBox x:Name="lstEmployee" HorizontalAlignment="Left" Height="362" Margin="25,19,0,0" VerticalAlignment="Top" Width="217" SelectionChanged="lstEmployee_SelectionChanged"/>
ComboBox 和 ListBox 从代码隐藏文件(ObservableCollection)中获取源代码:
cmbGroup.ItemsSource = Database_Contract.GetListOfContract();
lstEmployee.ItemsSource = Database_Employee.GetListOfEmployee();
当在 wpf 的代码隐藏文件中的 ListBox 中选择员工时,我设置了 DataContext:
DataContext = lstEmployee.SelectedItem;
与 ListBox 和 TextBoxes 的绑定工作正常,但我遇到了 Combobox 的问题: 源代码有效,意味着我可以选择不同的组。但是对选定的员工没有约束力。因此,当我选择员工时,带有前名和姓氏的 TextBoxes 填写正确,但 Combobox ist emtpy。但是当我单击组合框时,我可以从给定的组中进行选择。
那么我做错了什么?
编辑: 当我将 ComboBox.SelectedIndex 的绑定设置为 Group.GroupID 时,它就可以工作了。但不保证 GroupID 和 ComboBox-Index 相同。
【问题讨论】:
-
在您的 xaml 中是一个名为 cmbGroup 的
ComboBox,并且您正在设置一个名为 cmbContract 的ComboBox的ItemsSource。这有点令人困惑。可以肯定的是:ComboBox中的项目对于每个员工都是相同的,当您在ListBox中选择员工时,您想在ComboBox中选择匹配的条目? -
请注意,您可以编写像
Text="{Binding SelectedItem.Lastname, ElementName=lstEmployee}"这样的绑定,而不是更改 Window 的 (?) DataContext。 -
您还必须确保 SelectedItem 属性绑定到的 Group 实例实际上包含在 ListBox 的 ItemsSource 集合中。如果它们是不同的对象,您可以重写 EmployeeGroup 类的 Equals 方法。
-
@Mighty,我打错了,现在正确了
-
@Clemens,我很确定它是同一个对象,但是有没有办法验证它?
标签: c# wpf combobox binding custom-lists