Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合框绑定_C#_Wpf_Combobox_Binding_Custom Lists - Fatal编程技术网

C# 组合框绑定

C# 组合框绑定,c#,wpf,combobox,binding,custom-lists,C#,Wpf,Combobox,Binding,Custom Lists,我有一个名为“employee”的类: “雇员组”类别: 和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}" Horizo

我有一个名为“employee”的类:

“雇员组”类别:

和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"/>
当在wpf的代码隐藏文件的列表框中选择一名员工时,我设置了DataContext:

DataContext = lstEmployee.SelectedItem;
ListBox和TextBox的绑定工作正常,但Combobox有一个问题: 源代码有效,意味着我可以选择不同的组。但对所选员工没有约束力。因此,当我选择员工时,文本框中的前名和姓氏都正确填充,但组合框是emtpy。但是当我单击组合框时,我可以从给定的组中进行选择

那么我做错了什么

编辑:
当我将ComboBox.SelectedIndex的绑定设置为Group.GroupID时,它就工作了。但不能保证GroupID和ComboBox索引是相同的。

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

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

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

我找到了一个解决方案。。。 我已更改为MVVM,将cmbGroup的绑定设置为ListOfGroup,重写了EmployeeGroup类的GetHashCode和Equals方法,并且可以正常工作。
谢谢大家

在xaml中有一个名为cmbGroup的
组合框
,您正在设置名为cmbGroup的
组合框
项目资源。这有点令人困惑。请确保:
组合框
中的项目对于每个员工都是相同的,当您在
列表框
中选择一个员工时,您想在
组合框
中选择匹配的条目吗?请注意,您可以编写绑定,而不是更改窗口的(?)数据上下文{Binding SelectedItem.Lastname,ElementName=lstEmployee}”
。您还必须确保SelectedItem属性绑定到的组实例实际包含在ListBox的ItemsSource集合中。如果它们是不同的对象,您可以重写EmployeeGroup类的Equals方法。@Mighty,我键入的是错误的,现在它是正确的@Clemens,我非常确定它不是同一个对象,但有办法验证吗?“将整个视图的DataContext设置为所选员工,这实际上也在更改组合框的绑定上下文,因此所有绑定都在更改”不是问题,而是OP想要做的事情。
<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"/>
cmbGroup.ItemsSource = Database_Contract.GetListOfContract();
lstEmployee.ItemsSource = Database_Employee.GetListOfEmployee();
DataContext = lstEmployee.SelectedItem;