我有一个类名为 “员工”:WPF-组合框绑定
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"/>
组合框和ListBox从代码隐藏文件(ObservableCollection)中获取源代码:
cmbGroup.ItemsSource = Database_Contract.GetListOfContract();
lstEmployee.ItemsSource = Database_Employee.GetListOfEmployee();
我设置的DataContext当员工在列表框中选择在WPF的代码隐藏文件:
DataContext = lstEmployee.SelectedItem;
与列表框的结合和文本框工作正常,但我有一个Combobox问题: 源代码工作,意味着我可以选择不同的组。但是对选定的员工没有约束力。所以,当我选择员工时,带有前缀和姓氏的文本框填充正确,但组合框是空格。但是当我点击Combobox时,我可以从给定的组中选择。
那么我做错了什么?
编辑: 当我将ComboBox.SelectedIndex绑定到Group.GroupID,然后它的工作。但不能保证GroupID和ComboBox-Index是相同的。
在你的xaml中是一个名为cmbGroup的'ComboBox',你正在设置名为cmbContract的'ComboBox'的'ItemsSource'。这有点令人困惑。 可以肯定的是:你的'ComboBox'中的项目对每个员工都是一样的,当你在'ListBox'中选择一个员工时,你想选择'ComboBox'中的匹配条目? –
需要注意的是,您可以不用更改Window的(?)DataContext,而是使用'Text =“{Binding SelectedItem.Lastname,ElementName = lstEmployee}''编写您的绑定。 – Clemens
您还必须确保SelectedItem属性绑定的组实例实际上包含在ListBox的ItemsSource集合中。如果它们是不同的对象,则可以覆盖EmployeeGroup类的Equals方法。 – Clemens