我试图在MultiBinding上显示一些带有StringFormat绑定的标签。
就像这样:
<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.我可以在ViewModel中使用内容绑定和创建字符串,但是当有更多这样的标签时,这是不被注意的。
谢谢加库布
解决方案:
使用转换器:
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>当字符串格式是多重绑定的最后一个参数时,此工作。
发布于 2014-08-11 16:43:57
只需添加"LabelStringFormat“作为多绑定的参数:
<MultiBinding>
<Binding Path="Lib1" />
<Binding Path="Lib2" />
<Binding Path="LabelStringFormat" Source="{DynamicResource Texts}" />
</MultiBinding>使用IValueConverter执行String.Format((string)values[2], values[0], values[1])格式设置。
发布于 2014-08-11 16:40:52
我不认为您需要在MultiBinding.StringFormat属性上使用绑定。相反,你能做这样的事吗?
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{DynamicResource Texts.LabelStringFormat}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>https://stackoverflow.com/questions/25247992
复制相似问题