【发布时间】:2020-05-03 07:13:37
【问题描述】:
在 DataGrid 中,其中一列是 Account。我想选择 AccountId,但 ComboBox 应该显示 AccountNames。所以我在下面创建了 xaml。它按要求工作,但有一个缺点。如果我更改帐户并转到同一行中的另一个单元格,则 AccountName 尚未更新。 (如果我离开该行,则会根据新的 AccountId 计算和更新 AccountName。)
如果我只将 CellTemplate 与 ComboBox 一起使用,那么我会避开这个问题,但我不喜欢这种解决方案,因为在不需要时显示 ComboBox 并不好。当我离开单元格时,我可以尝试更新 AccountName,但我的数据库视图会这样做,此时当前行中可能存在错误。因此,我想根据 AccountId 在 CellTemplate 中将选定的 AccountName 显示为 TextBlock。 (我尝试将 ComboBox 放入 TextBlock 中,但 TextBlock 不仅显示所选的 AccountName,还显示 ComboBox 本身。)
<DataGridTemplateColumn Header="{x:Static r:Resource.AccountName}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AccountName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource TextBlockError}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGrid}}, Path=DataContext.AccountObjects}"
SelectedValue="{Binding AccountId, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}"
SelectedValuePath="Id"
DisplayMemberPath="Name"
Style="{StaticResource ComboBoxError}" IsEditable="True"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
【问题讨论】: