1 つの特別な動作を実装する方法がわかりません。2 つの列を含むデータグリッドのビューがあります。1 つの列には、書式設定された価格 ("00.00") が表示されます。バインディングが更新される (プロパティが設定される) と、価格は自動的に保存されます。UpdateSourceTrigger=PropertyChanged を使用すると、価格は常に正確になります。このトリガーの欠点は、ユーザーがテキストボックス内のすべてのテキストを選択して「1」とだけ入力すると、価格が「01.00」にフォーマットされることです。価格を自動的にフォーマットしたくありません。その書式設定は、フォーカスが他のオブジェクトに移動したときにのみ表示されます。
理論的には、2 つの異なる UpdateSourceTrigger を設定する必要があります。バックエンドを更新するためのもの (ユーザーがテキスト ボックスに何かを入力します)。もう 1 つはターゲットを更新するためのものです (フォーカスが別のオブジェクトに移動しました)。さらに、新しい値が無効な場合は、すぐに表示する必要があります。
<DataGrid>
<DataGrid.Columns>
<!-- one other column -->
<DataGridTemplateColumn Header="Price"/>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!-- this textbox should update the source if user types something -->
<!-- the textbox itself should be updated after lost focus -->
<TextBox Text="{Binding Price, UpdateSourceTriger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn/>
</DataGrid.Column>
</DataGrid>
編集: 小さな例を挙げます: バインドされた Price プロパティを "1" に設定すると、自動的に "01.00" にフォーマットされます。UpdateSourceTrigger=PropertyChanged を使用すると、TextBox に「01.00」が表示されます。TextBox がフォーカスされている限り、TextBox に「1」が表示されるようにします。もちろん、UpdateSourceTrigger=LostFocus を使用すると、その動作が得られます。ここでの問題は、DataGrid が TabControll に含まれており、両方のコントロールがうまく連動しないことです。フォーカスがまだ TextBox にあるときに別のタブを選択すると、TextBox によってスローされる LostFocus はありません。
あなたの何人かが私にアドバイスをしてくれることを願っています:-)
アンドレ