В DataGrid одним из столбцов является Учетная запись. Я хочу выбрать AccountId, но ComboBox должен отображать AccountNames. Итак, я создал XAML ниже. Он работает как требуется, но у него есть недостаток. Если я изменю учетную запись и go на другую ячейку в той же строке, то AccountName еще не обновляется. (Если я покидаю строку, то AccountName вычисляется и обновляется на основе нового AccountId.)
Если я использую только CellTemplate с ComboBox, тогда я избежал проблемы, но мне не нравится это решение, потому что оно не очень хорошее показывать комбинированные списки, когда они не нужны. Я мог бы попытаться обновить AccountName, когда я покину ячейку, но мое представление БД сделало бы это, и в этот момент могли быть ошибки в текущей строке. Поэтому я хотел бы показать выбранное AccountName как TextBlock в CellTemplate на основе AccountId. (Я попытался поместить ComboBox в TextBlock, но тогда TextBlock показывает не только выбранное имя учетной записи, но и сам 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>