以下に 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 プロパティに関係しているのではないかと考え始めています。現在選択されているバインディング コレクションが変更されているため、すべてのコンボボックスが同期しようとしている可能性があります。