WPF的DataGrid验证中的问题 - MVVM

时间:2011-01-19 12:39:47

标签: wpf mvvm datagrid validation

场景:我的视图中有一个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键行为吗?这样用户在修复无效行之前无法编辑任何其他行。

1 个答案:

答案 0 :(得分:1)

我将UpdateSourceTrigger更改为显式,并解决了问题

     <DataTemplate>
          <TextBox Text="{Binding Type, UpdateSourceTrigger=Explicit}"/>
     </DataTemplate>