2010-10-24 58 views
11

我有一個文本塊的集合,我將要顯示,我需要每個文本塊的文本以不同的方式顯示。我目前在標籤屬性中保存格式字符串,我需要以這種格式顯示文本。如何綁定StringFormat部分?綁定StringFormat

類似下面的部分:

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

回答

18

由於BindingBase.StringFormat不是依賴屬性,我不認爲你可以綁定。如果格式化字符串變化,恐怕你將不得不訴諸這樣的事情

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

,並做了格式化您的視圖模型。可替換地,可以使用一個MultiBinding和一個轉換器(例如代碼未測試):

<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

字符串格式化是顯示設置,因此應緊貼住UI層,既可以聲明它在XAML或有在ViewModel上格式化字符串屬性,並在獲取這些屬性中執行格式化,並將TextBlock綁定到ViewModel屬性。它會從原始數據源獲取數據。

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