質問

10進数のObservableCollectionにバインドされたComboBoxがあります。通貨コンバーターをアイテムに適用する正しい方法は何ですか?

編集:

a)使用する必要がある既存の通貨コンバーターがあります b).NET 3.0

アイテムをテンプレート化する必要がありますか?

役に立ちましたか?

解決

変換を行うためのコードがある場合は、テンプレートを介して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クラスを定義するだけです。

他のヒント

ComboBoxのItemStringFormatプロパティを使用して、各アイテムのフォーマット方法を指定できます。

<ComboBox ItemStringFormat="c">

ただし、&quot; c&quot;を使用する場合は、通貨フォーマッターとして、ローカルマシンで定義された通貨を使用します。値が$で定義されているが、クライアントPCがポンド記号または円記号を通貨記号として実行している場合、表示したいものは表示されません。

のようなバインディング式で StringFormat を使用します
<TextBox Text="{Binding Path=Value, StringFormat=Amount: {0:C}}"/>

こちらをご覧ください詳細についてはブログをご覧ください。

A ValueConverter は別の方法です-StringFormatは.NET3.0では機能せず、WPF3.5 SP1が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top