2010-10-24 22 views
11

Tengo una colección de bloques de texto que voy a mostrar y necesito que el texto de cada bloque de texto se muestre de forma diferente. Actualmente estoy guardando la cadena de formato en la propiedad de la etiqueta y necesito mostrar el texto en este formato. ¿Cómo puedo enlazar la sección StringFormat?Binding StringFormat

Algo así como la sección de abajo:

<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />

Respuesta

18

Desde BindingBase.StringFormat no es una propiedad de dependencia, no creo que se puede obligar a éste. Si la cadena de formato varía, me temo que tendrá que recurrir a algo como esto

<TextBlock Text="{Binding MyFormattedProperty}" /> 

y hacer el formato en su modelo de vista. Alternativamente, se puede utilizar un MultiBinding y un convertidor (código de ejemplo no probado):

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource myStringFormatter}"> 
      <Binding Path="MyProperty" /> 
      <Binding Path="MyFormatString" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

public class StringFormatter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format((string)values[1], values[0]); 
    } 
    ... 
} 
0

El formato de cadenas es una configuración de pantalla y por lo tanto debe vivir cerca de la capa de interfaz de usuario, puede declarar que en el Xaml o tienen propiedades de cadena formateadas en un ViewModel y realizar el formateo en el Get de esas propiedades y vincular el TextBlock a las propiedades de ViewModel. Obtendría sus datos del origen de datos original.

1
<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0},{1}"> 
      <Binding Path="MyProperty" /> 
      <Binding Path="MyFormatString" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock>