与绑定的StringFormat MultiBinding(MultiBinding with bi

2019-10-20 16:46发布

我试图用结合上的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。

Answer 1:

只需添加“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])



Answer 2:

我不认为你需要使用绑定在MultiBinding.StringFormat财产。 相反,你可以做这样的事情?

<Label.Content>
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{DynamicResource Texts.LabelStringFormat}">
                <Binding Path="Lib1" />
                <Binding Path="Lib2" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Label.Content>


文章来源: MultiBinding with binding StringFormat