1

プロパティバインディングでStringFormatを使用する場合の.Net3.5と4.0の違いは何ですか?

Textプロパティがdouble型のプロパティにバインドするテキストボックスのみを含むWPFウィンドウがあります。3.5では、数値を編集するとテキストボックスは期待どおりに機能しますが、4.0では、小数点の片側しか編集できず、バックスペースまたは削除を使用すると、奇妙なフォーマットが発生し、データが上書きされます。これを示す最良の方法は、さまざまなフレームワークを対象とした例を試すことです。

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, UpdateSourceTrigger=PropertyChanged, StringFormat=0.000}"  Margin="185,130,209,146" />

また、UpdateSourceTriggerを削除すると、.Net4.0が3.5バージョンのように機能することに気付きました。UpdateSourceTriggersは異なるバージョンで逆になりましたか?

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, StringFormat=0.000}"  Margin="185,130,209,146" />
4

2 に答える 2

2

このMicrosoftConnectの問題は、発生している問題を説明していると思います。

3.5では、バインディングは、TextBoxテキストを変更せずに、キーストロークごとに新しい値をソースに書き戻します。ただし、そのテキストはソースの値を正確に表していない可能性があります。おそらく、フォーマットと変換が含まれていないか、ソースが(プロパティセッターの)値を別の値に変更したためです。これは頻繁で激しい不満につながりました-人々はTextBoxが同じコンバーターとフォーマットで同じプロパティにバインドされた場合とまったく同じようにソースの値を表示することを望んでいました。UIは、エンドユーザーが入力した内容ではなく、実際にデータに含まれている内容を表示する必要があります。

4.0でこのクラスのバグを修正するために、バインディングは、更新のたびにソースの新しい値にフォーマットと変換を適用するようになりました。(LostFocusバインディングは3.5ですでにこれを行っています。)TextBoxはデータの内容を表示するようになりましたが、これによりユーザーの入力がより複雑になる可能性があります。

于 2012-06-29T02:56:52.377 に答える
0

標準のWPFは、xamlコードで少し異なり、以下を使用します。

.., StringFormat={}{0:C2}}"
.., StringFormat={}{0:dd/MM/yyyy}}"

その他のサンプル:
http ://elegantcode.com/2009/04/07/wpf-stringformat-in-xaml-with-the-stringformat-attribute/
http://www.codeproject.com/Articles/195436/Formatting-text -in-Silverlight-XAML-using-StringFo

于 2012-06-28T20:51:35.697 に答える