首页 文章

WPF-组合框绑定

提问于
浏览
0

我有一个名为“员工”的 class :

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就是emtpy . 但是当我点击Combobox时,我可以从给定的组中进行选择 .

那我做错了什么?

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

2 回答

  • 0

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

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

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

  • 0

    我找到了一个解决方案...我已经改为MVVM,将cmbGroup的绑定设置为ListOfGroup,重写了EmployeeGroup类的GetHashCode和Equals方法,并且它可以工作 . 多谢你们!

相关问题