我在下面有一个 DataGridTemplateColumn 设置。我的问题是当我使用组合框更改行员工时,我看到其他一些行也更改了值。我认为它以某种方式与绑定有关,但这很奇怪,因为我在 celleditingtemplate 中似乎看不到我的 itemsource 数据上下文(任务),但我可以在 celltemplate 中看到。
<UserControl.Resources>
<CollectionViewSource x:Key="EmployeeViewSource" Source="{Binding Path=Employees}" />
</UserControl.Resources>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Tasks}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Employee Name">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox DisplayMemberPath="Name" ItemsSource="{Binding Source={StaticResource EmployeeViewSource}}" SelectedValue="{Binding Path=EmployeeID}" SelectedValuePath="EmployeeID" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Employee.Name, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
相关的 ViewModel 如下所示:
Class TaskViewModel : ViewModelBase
{
public ObservableCollection<Task> Tasks { get; private set; }
Public ObservableCollection<Employee> Employees { get; private set; }
}
任务/员工模型都是具有一些字段的实体生成类。
更新:我开始认为这可能与 IsSynchronizedWithCurrentItem 属性有关。也许所有的组合框都在尝试同步,因为当前选择的绑定集合正在改变。