WPF-组合框绑定

WPF- Combobox Binding

我有一个 class 名为 "employee":

public string Forname { get; set; }
public string Lastname { get; set; }
public EmployeeGroup Group { get; set; }

一个class"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 的代码隐藏文件的列表框中 selected 时,我设置了 DataContext:

DataContext = lstEmployee.SelectedItem;

ListBox 和 TextBox 的绑定工作正常,但 Combobox 有问题: 来源有效,意味着我可以 select 不同的组。但是对 selected 员工没有约束力。因此,当我 select 员工时,带有名字和姓氏的文本框填写正确,但组合框是空的。但是当我单击组合框时,我可以从给定的组中进行选择。

那么我做错了什么?

编辑: 当我将 ComboBox.SelectedIndex 的绑定设置为 Group.GroupID 时,它就起作用了。但是不能保证GroupID和ComboBox-Index是一样的。

我认为问题出在将整个视图的 DataContext 设置为选定的 Employee 时。
这也有效地改变了组合框的绑定上下文,因此所有绑定都在改变。

我建议您在代码中给自己一个 SelectedEmployee 属性 并在 selectedItemChanged 事件中设置它,然后您可以将文本框的绑定更改为 Text="{Binding SelectedEmployee.Forname}"

您可能会发现执行此操作时屏幕上的值不会自动更新,这是因为您需要在表单代码中实现 INotifyPropertyChanged,然后从 属性 设置器告诉绑定刷新。

我找到了解决方案... 我已更改为 MVVM,将 cmbGroup 的绑定设置为 ListOfGroup,覆盖了 class EmployeeGroup 的 GetHashCode 和 Equals 方法,并且它起作用了。 谢谢大家!