我有一個文本塊的集合,我將要顯示,我需要每個文本塊的文本以不同的方式顯示。我目前在標籤屬性中保存格式字符串,我需要以這種格式顯示文本。如何綁定StringFormat部分?綁定StringFormat
類似下面的部分:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
我有一個文本塊的集合,我將要顯示,我需要每個文本塊的文本以不同的方式顯示。我目前在標籤屬性中保存格式字符串,我需要以這種格式顯示文本。如何綁定StringFormat部分?綁定StringFormat
類似下面的部分:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
由於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]);
}
...
}
字符串格式化是顯示設置,因此應緊貼住UI層,既可以聲明它在XAML或有在ViewModel上格式化字符串屬性,並在獲取這些屬性中執行格式化,並將TextBlock綁定到ViewModel屬性。它會從原始數據源獲取數據。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0},{1}">
<Binding Path="MyProperty" />
<Binding Path="MyFormatString" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>