1

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 はありません。

あなたの何人かが私にアドバイスをしてくれることを願っています:-)

アンドレ

4

1 に答える 1

0

UpdateSourceTrigger=LostFocusユーザーが TextBox からフォーカスを外したときに、いつでも数値の書式設定をトリガーするために使用できます。検証には、ユーザー コントロールに組み込まれているValidation in Windows Presentation Format を利用することをお勧めします。

編集:フォーカスを設定する (TextBlock からフォーカスを削除する) にはOnSelectイベントを追加しますが、TabItem で IsEnabled と IsFocusable を有効にする必要があります。TabItem

于 2012-10-04T12:28:00.663 に答える