Pregunta

Tengo un ComboBox vinculado a una Colección Observable de decimales. ¿Cuál es la forma correcta de aplicar nuestro convertidor de divisas a los artículos?

Editar:

a) Tengo un convertidor de moneda existente que debo usar b) .NET 3.0

¿Necesito crear plantillas para los elementos?

¿Fue útil?

Solución

Su mejor opción si tiene algún código para realizar la conversión es ejecutar cada elemento a través de un IValueConverter a través de una plantilla.

<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}" />

Entonces, simplemente define su clase CurrencyConverter de modo que implemente IValueConverter y llame a su código para convertir la cantidad dada en una cadena formateada.

Otros consejos

Puede usar la propiedad ItemStringFormat en ComboBox para indicarle cómo formatear cada uno de sus elementos:

<ComboBox ItemStringFormat="c">

Sin embargo, tenga en cuenta que cuando se utiliza " c " como formateador de moneda, usará la moneda definida por la máquina local. Si sus valores están definidos en $ pero su PC cliente se ejecuta con libras o yenes como su símbolo de moneda, no verán lo que usted quiere que vean.

Utilice StringFormat en la expresión de enlace como

<TextBox Text="{Binding Path=Value, StringFormat=Amount: {0:C}}"/>

Vea esto blog para más detalles.

A ValueConverter es otra forma - StringFormat no funciona en .NET3.0, necesita WPF3.5 SP1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top