我试图用结合上的StringFormat显示一些标签与MultiBinding。
像那样:
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{Binding LabelStringFormat, Source={DynamicResource Texts}}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
LabelStringFormat可以是类似 “[{0} / {1}]” 或类似的东西。 它在构建已知,但必须从资源使用。
但是,当我使用类似上面的代码,我得到错误:
A 'Binding' cannot be set on the 'StringFormat' property of type 'MultiBinding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
我可以使用内容绑定和视图模型创建的字符串,但它是被忽视的时候有更多的标签,像这样的。
谢谢你的Jakub
解:
使用转换器:
public class StringMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format(values.Last() as string, values);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
在WPF添加到转换器资源:
<UserControl.Resources>
<ResourceDictionary>
<myComponents:StringMultiValueConverter x:Key="stringMultiValueConverter"/>
</ResourceDictionary>
</UserControl.Resources>
在添加标签:
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource stringMultiValueConverter}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
<Binding Path="LabelStringFormat" Source="{Dynamic Texts}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
这项工作时字符串格式Multibinding的最后PARAM。