2011-01-19 65 views
1

シナリオ:私のビューにDataGrid(1列のみ)があります。 XAMLでDataGridにRowValidationRuleを適用しました。ユーザーがDataGridCellを空白のままにすると、検証ルールによってエラーが発生し、ユーザーは行の周囲の赤い境界線とエラーを説明するツールチップを見ることができます。 DataGridのデフォルトの動作では、ユーザーが現在の無効なセルを修正するまで、他のセルを変更することはできません。しかし、ユーザーが無効なセルをクリックし、エスケープキーを押すと、赤いエラーメッセージが表示されなくなり、ユーザーは他のレコードを変更することができます。エスケープキーは、最後の有効な値をセルに配置します。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> 

問題:ユーザープレスが無効なセルのキーをエスケープすると、セルが(前回の値を使用して)有効になりますが、ユーザーがクリックするまで、前の値が決して表示されません以前は無効なセル、つまりセルスタイルがテキストボックスに変わるまで。言い換えれば、ユーザーがEscキーを押して以前の値を復元した場合、ユーザーがセルを再度クリックして値を編集しようとするまで、TextBlockは以前の値を表示しません。

テキストボックスモードに入る前に、エスケープキーを押した後にTextblockに値を表示させる方法はありますか?

上記のことができない場合は、エスケープキーの動作を停止できる方法はありますか?無効な行が修正されるまでそのため、ユーザは..

答えて

1

を他の行を編集することはできません私は、明示的にUpdateSourceTriggerを変更し、それが問題を解決し

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