带绑定StringFormat的MultiBinding



我试图显示一些标签与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中创建字符串,但是当有更多像这样的标签时,它是不被注意的。

谢谢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的最后一个参数时,

我认为你不需要在MultiBinding上使用Binding。StringFormat财产。相反,你能做这样的事情吗?

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

只需添加"LabelStringFormat"作为多绑定的参数:

<MultiBinding>
    <Binding Path="Lib1" />
    <Binding Path="Lib2" />
    <Binding Path="LabelStringFormat" Source="{DynamicResource Texts}" />
</MultiBinding>

使用String.Format((string)values[2], values[0], values[1])从IValueConverter进行格式化。

相关内容

  • 没有找到相关文章

最新更新