我在下面有一个DataGridTemplateColumn设置。我的问题是当我使用组合框更改行员工时,我看到其他一些行也会更改值。我认为它与某种程度上的绑定有关,但它很奇怪,因为我似乎无法在celleditingtemplate内部看到我的itemsource datacontext(Tasks),但我可以在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属性有关。也许所有组合框都试图同步,因为选择的绑定收集电流正在变换。
答案 0 :(得分:0)
在'IsSynchronizedWithCurrentItem'属性上跟随前导后,似乎答案在于ComboBox。这是一个更详细的解释:
https://stackoverflow.com/questions/2458420/wpf-combobox-binding