2010-10-24 4 views
11

Mam kolekcję bloków tekstowych, które będę wyświetlać, i chcę, aby tekst każdego bloku tekstowego był wyświetlany inaczej. Obecnie zapisuję ciąg formatu we właściwości znacznika i muszę wyświetlić tekst w tym formacie. Jak powiązać sekcję StringFormat?Binding StringFormat

Coś w poniższej sekcji:

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

Odpowiedz

18

Od BindingBase.StringFormat nie jest właściwość zależność, nie sądzę, że można go związać. Jeśli ciąg formatowania jest różny, obawiam się, że będziesz musiał odwołać się do czegoś podobnego do tego, jak to zrobić, i sformatować w swoim modelu widoku. Alternatywnie, można użyć MultiBinding i konwerter (przykładowy kod niesprawdzone):

<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

String formatowanie jest ustawienie wyświetlacza, a więc powinien żyć blisko warstwie UI, można zadeklarować w XAML lub mieć Sformatowane właściwości ciągów na ViewModelu i wykonaj formatowanie w Get z tych właściwości i powiązanie TextBlock z nimi właściwości ViewModel. Będzie pobierał swoje dane z oryginalnego źródła danych.

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