CellEditingTemplate не активируется при добавлении новой строки в DataGrid в WPF - PullRequest
0 голосов
/ 30 мая 2020

Несколько раз пытался решить эту проблему. В DataGrid я отображаю данные о финансовых транзакциях. Один столбец - это класс Account, который является свойством навигации (EF). У меня простая проверка. Свойство Account не должно быть пустым.

Вот столбец:

    <DataGridTemplateColumn Header="{x:Static r:Resource.AccountName}" 
                                    CellTemplate="{StaticResource AccountTemplate}"
                                    CellEditingTemplate="{StaticResource AccountEditingTemplate}" />

Вот DataTemplates:

    <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 (например, в новой строке)).

Если я хочу изменить Аккаунт в существующей строке, все работает.

enter image description here

Если я хочу изменить Аккаунт в новом row, тогда ComboBox не появляется! (Еще один сбивающий с толку факт: если я нажму на Учетную запись в новой строке, появится ComboBox, если я go перейду в другой столбец, я не могу вернуть ComboBox)

enter image description here

ОБНОВЛЕНИЕ 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;
        }
    }
...