场景:我的视图中有一个DataGrid(只有一列)。我在XAML中的DataGrid上应用了RowValidationRule。每当用户将DataGridCell留空时,我的验证规则会触发错误,用户可以看到行周围的红色边界以及解释错误的工具提示。 DataGrid的默认行为不允许用户更改任何其他单元格,直到用户修复此当前无效单元格。但是,如果用户单击“无效单元格”并按Escape键,则会显示红色错误消息,用户可以更改任何其他记录。 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键并恢复之前的值,则TextBlock永远不会显示上一个值,直到用户再次单击该单元格并尝试编辑该值。
那么有什么方法可以强制Textblock在没有先进入文本框模式的情况下按下转义键后显示值?
如果上面的东西不可能,有什么方法可以阻止Escape键行为吗?这样用户在修复无效行之前无法编辑任何其他行。
答案 0 :(得分:1)
我将UpdateSourceTrigger更改为显式,并解决了问题
<DataTemplate>
<TextBox Text="{Binding Type, UpdateSourceTrigger=Explicit}"/>
</DataTemplate>