2011-01-19 155 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>