2011-01-19 97 views
1

场景:我的View中有一个DataGrid(只有一列)。我在XAML的DataGrid上应用了RowValidationRule。每当用户将DataGridCell留空时,我的验证规则会触发错误,用户可以看到该行周围的红色边界以及解释错误的工具提示。 DataGrid的默认行为不允许用户更改任何其他单元格,直到用户修复此当前无效单元格为止。但是,如果用户点击无效单元并按Esc键,则红色错误消息将消失,用户可以更改任何其他记录。什么逃生关键是它将最后一个有效值放到单元格中。WPF的DataGrid验证问题 - MVVM

我用这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键上无效的单元格键,电池有效(使用前值),但直到用户点击以前的值永远不会出现以前无效的单元格,即直到单元格样式更改为文本框。换句话说,如果用户按Esc键,TextBlock从不显示以前的值,并恢复先前的值,直到用户再次单击单元格并尝试编辑该值。

那么有没有什么办法可以强制Textblock在没有先进入文本框模式的情况下按下快速键后显示值?

如果上面的东西是不可能的,有没有什么办法可以阻止Escape键的行为?所以直到无效的行是固定的用户不能编辑任何其他行..

回答

1

我改变了对UpdateSourceTrigger明确的,它解决了问题

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