小数のObservableCollectionにバインドされたComboBoxがあります。通貨コンバーターをアイテムに適用する正しい方法は何ですか?
編集:
a)使用しなければならない既存の通貨コンバーターがありますb).NET 3.0
アイテムをテンプレート化する必要がありますか?
小数のObservableCollectionにバインドされたComboBoxがあります。通貨コンバーターをアイテムに適用する正しい方法は何ですか?
編集:
a)使用しなければならない既存の通貨コンバーターがありますb).NET 3.0
アイテムをテンプレート化する必要がありますか?
ComboBoxのItemStringFormatプロパティを使用して、各アイテムのフォーマット方法を指示できます。
<ComboBox ItemStringFormat="c">
ただし、通貨フォーマッタとして「c」を使用する場合は、ローカルマシンで定義された通貨を使用することに注意してください。値が$で定義されているが、クライアントPCが通貨記号としてポンドまたは円を使用して実行されている場合、クライアントPCには表示したいものが表示されません。
変換を行うためのコードがある場合の最善の策は、実際には、テンプレートを介してIValueConverterを介して各アイテムを実行することです。
<Window.Resources>
<my:CurrencyConverter x:Key="currencyConverter" />
<DataTemplate x:Key="thingTemplate" DataType="{x:Type my:Thing}">
<TextBlock
Text="{Binding Amount,Converter={StaticResource currencyConverter}}" />
</DataTemplate>
</Window.Resources>
<ComboBox
ItemSource="... some list of Thing instances ..."
ItemTemplate="{StaticResource thingTemplate}" />
したがって、IValueConverterを実装し、コードを呼び出して指定された金額をフォーマットされた文字列に変換するように、CurrencyConverterクラスを定義するだけです。
次のようなBinding式でStringFormatを使用します
<TextBox Text="{Binding Path=Value, StringFormat=Amount: {0:C}}"/>
詳細については、このブログを参照してください。
ValueConverterは別の方法です-StringFormatは.NET3.0では機能しません。WPF3.5SP1が必要です。