我有一个无法解决的难题,至少从以MVVM的角度来看这是没有道理的。
我有一个数据网格,其中包含客户-员工数据以及每个客户/员工关系的开始日期和结束日期。
DataGrid的所有ItemsSource是绑定到ClientToEmpObservableCollection的ClientToEmp CollectionViewSource。但是,在允许他们更改/更新当前雇员的组合框列中,ItemsSource是绑定到User ObservableCollection的Employee CollectionViewSource(即,他们可以为此客户端选择的所有雇员的列表)。
这部分工作正常,当我单击组合框时,将显示适当的员工以从组合框中选择。但是,当加载数据网格时,我希望将ClientToEmp cvs中的CurrentEmp显示为选定的员工(即,当前分配给此客户端的员工)。当他们单击它时,他们应该能够更改Employee(来自单独的员工cvs),然后将更新ClientToEmp cvs中的值。
<DataGrid Name="ClientToEmpMDG" ItemsSource="{Binding cvsClientToEmp}"
AutoGenerateColumns="False" AutoGeneratingColumn="Gen_AutoGridColumns">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ClientName}" Header="Client Name" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Current Emp">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.cvsEmp, RelativeSource={RelativeSource AncestorType=Window}}"
DisplayMemberPath="DisplayName"
SelectedValuePath="User_ID"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Start Date">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker Name="StartDateDP" SelectedDate="{Binding Path=Start_Date}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="End Date">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker Name="EndDateDP" SelectedDate="{Binding Path=End_Date}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
如何使当前员工在负载下正常显示?所选值应与两个ObservableCollections中的User_ID相匹配。如果我使用SelectedValue属性,则网格中的所有组合框都显示相同的值,并且它仍未正确绑定到我希望绑定到的cvsClientToEmp值。我希望每个组合框都具有自己的价值,而不是让所有组合共享一个单一的价值。
更新:我通过将“ IsSynchronizedWithCurrentItem”添加到False来解决了所有组合框显示相同值的问题...仍然无法使它绑定到从DB返回的值上,即当前雇员是谁
答案 0 :(得分:0)
您在SelectedValue
中缺少ComboBox
<ComboBox ItemsSource="{Binding Path=DataContext.cvsEmp, RelativeSource={RelativeSource AncestorType=Window}}"
DisplayMemberPath="DisplayName"
SelectedValue="{Binding CurrentEmp}"
SelectedValuePath="User_ID"/>
另请参见https://stackoverflow.com/a/4902454/10718884
注意:还有一个DataGridComboBoxColumn
<DataGridComboBoxColumn
ItemsSource="{Binding Path=DataContext.cvsEmp, RelativeSource={RelativeSource AncestorType=Window}}"
DisplayMemberPath="DisplayName"
SelectedValueBinding="{Binding CurrentEmp}"
SelectedValuePath="User_ID">
</DataGridComboBoxColumn>