CellEditingTemplate не активируется при добавлении новой строки в DataGrid в WPF
Несколько раз пытался решить эту проблему. В DataGrid я отображаю данные о финансовых транзакциях. Один столбец - это класс Account, который является свойством навигации (EF). У меня простая проверка. Свойство Account не должно быть пустым.
Вот столбец:
<DataGridTemplateColumn Header="{x:Static r:Resource.AccountName}"
CellTemplate="{StaticResource AccountTemplate}"
CellEditingTemplate="{StaticResource AccountEditingTemplate}" />
Вот шаблоны данных:
<DataTemplate x:Key="AccountEditingTemplate">
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGrid}}, Path=DataContext.AccountObjects}"
SelectedItem="{Binding Account, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}"
DisplayMemberPath="Name" Style="{StaticResource ComboBoxError}" IsEditable="True"
ToolTip="{Binding Account.Name}" />
</DataTemplate>
<DataTemplate x:Key="NameTemplate">
<TextBlock Text="{Binding Name}" ToolTip="{Binding Name}"/>
</DataTemplate>
<DataTemplate x:Key="AccountTemplate">
<ContentControl Content="{Binding Path=Account, ValidatesOnDataErrors=True}"
ContentTemplate="{StaticResource NameTemplate}"/>
</DataTemplate>
CellEditingTemplate отображает ComboBox с потенциальными учетными записями. CellTemplate сложен. В AccountTemplate я привязал учетную запись, чтобы правильно получить ошибку проверки. Затем я использую NameTemplate для отображения Account.Name как TextBlock. (Раньше я привязывал "Account.Name", но проверка вложенного свойства непросто, если Account имеет значение null (например, в новой строке)).
Если я хочу изменить учетную запись в существующей строке, все работает.
Если я хочу изменить учетную запись в новой строке, ComboBox не появится! (Еще один сбивающий с толку факт: если я щелкну по учетной записи в новой строке, появится ComboBox, если затем я перейду в другой столбец, я не могу вернуть ComboBox)
ОБНОВЛЕНИЕ 1
Моя проблема в том, что двойным щелчком я не могу открыть режим редактирования. Вот проверка (но проблема все еще возникает без проверки)
override public string this[string columnName]
{
get
{
var errorMessage = string.Empty;
switch (columnName)
{
case "Instrument":
if (Instrument == null)
errorMessage = nameof(Instrument) + " " + GlobalValues.AppData["must be given!"];
break;
case "Account":
if (Account == null)
errorMessage = nameof(Account) + " " + GlobalValues.AppData["must be given!"];
break;
}
return errorMessage;
}
}