Pregunta

Un control con plantilla en el que estoy trabajando usa un ValueConverter así:

<ListBox>
   <ListBox.Resources>
      <Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/>
   </ListBox.Resources>
   <ListBox.ItemTemplate>
      <DataTemplate>
         <TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

Este es el aspecto predeterminado que proporciono en generic.xaml. Cuando use este control, desearé pasar diferentes cadenas de formato al convertidor. ¿Hay alguna manera de hacer que eso suceda sin proporcionar el ControlTemplate completo?

Mi primer pensamiento fue que podía usar ConverterParameter con un TemplateBinding a una propiedad en el control, pero descubrí que ConverterParameters no puede vincularse. Otra opción podría ser obtener acceso al control desde el método ConvertTo y luego seleccionar esa propiedad. No estoy seguro de cómo hacer eso. Cualquier opción que elimine la necesidad de replantear completamente el control cada vez que lo use sería útil (es un montón de Xaml).

¿Fue útil?

Solución

En estas situaciones, generalmente hago una de dos cosas:

1) Vincular a un objeto que tiene acceso a la propiedad que desea vincular a la cadena de formato. En el convertidor, tendrá acceso tanto a la propiedad como a la cadena de formato.

2) Agregue propiedades a su objeto de datos / viewmodel / etc para la cadena de formato y el texto formateado. Luego vincular a las propiedades de texto con formato. Suponiendo que está utilizando INotifyPropertyChanged, tenga en cuenta que deberá activar el evento propertychanged para la propiedad de texto con formato cada vez que cambie el texto o las propiedades de la cadena de formato

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