Проблема в проверке DataGrid WPF - MVVM - PullRequest
1 голос
/ 19 января 2011

Сценарий: у меня есть DataGrid (только 1 столбец) в моем представлении. Я применил RowValidationRule к DataGrid в XAML. Всякий раз, когда пользователь оставляет пустым DataGridCell, мое правило проверки выдает ошибку, и пользователь может видеть красную границу вокруг строки и всплывающую подсказку, объясняющую ошибку. Поведение DataGrid по умолчанию не позволяет пользователю изменять любую другую ячейку, пока пользователь не исправит эту текущую недопустимую ячейку. Но если пользователь щелкнет Invalid Cell и нажмет Escape-клавишу, красное сообщение об ошибке исчезнет, ​​и пользователь сможет изменить любую другую запись. Экранирующий ключ делает последнее правильное значение в ячейке.

Я создаю столбец, используя этот XAML

 <DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
              <TextBlock Text="{Binding Path=Type, UpdateSourceTrigger=PropertyChanged}"/>
          </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>

    <DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
              <TextBox Text="{Binding Type, UpdateSourceTrigger=PropertyChanged}"/>
         </DataTemplate>
     </DataGridTemplateColumn.CellEditingTemplate>
 </DataGridTemplateColumn>

Проблема: когда пользователь нажимает клавишу Escape на недопустимой ячейке, ячейка становится действительной (используя предыдущее значение), но предыдущее значение никогда не появляется, пока пользователь не щелкнет по ранее недействительной ячейке, т. Е. Пока стиль ячейки не изменится на Textbox. Другими словами, TextBlock никогда не показывает предыдущее значение, если пользователь нажимает клавишу Escape и восстанавливает предыдущее значение, пока пользователь снова не щелкнет ячейку и не попытается изменить значение.

Так есть ли способ заставить Textblock показывать значение после нажатия клавиши ESC, не входя в режим Textbox?

Если вышеуказанное невозможно, можно ли как-нибудь остановить поведение клавиши Escape? так что пользователь не может редактировать любую другую строку, пока не будет исправлена ​​неправильная строка ..

1 Ответ

1 голос
/ 19 января 2011

Я изменил UpdateSourceTrigger на явный, и это решило проблему

     <DataTemplate>
          <TextBox Text="{Binding Type, UpdateSourceTrigger=Explicit}"/>
     </DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...