首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有绑定MultiBinding的StringFormat

具有绑定MultiBinding的StringFormat
EN

Stack Overflow用户
提问于 2014-08-11 16:27:51
回答 2查看 2.7K关注 0票数 1

我试图在MultiBinding上显示一些带有StringFormat绑定的标签。

就像这样:

代码语言:javascript
复制
<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}“之类的东西。它在构建中是已知的,但必须从资源中使用。

但是,当我使用类似于上面的代码时,我会得到错误:

代码语言:javascript
复制
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中使用内容绑定和创建字符串,但是当有更多这样的标签时,这是不被注意的。

谢谢加库布

解决方案:

使用转换器:

代码语言:javascript
复制
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中,将转换器添加到参考资料:

代码语言:javascript
复制
<UserControl.Resources>
    <ResourceDictionary>
        <myComponents:StringMultiValueConverter x:Key="stringMultiValueConverter"/>
    </ResourceDictionary>
</UserControl.Resources>

在标签中添加:

代码语言:javascript
复制
<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>

当字符串格式是多重绑定的最后一个参数时,此工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 16:43:57

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

代码语言:javascript
复制
<MultiBinding>
    <Binding Path="Lib1" />
    <Binding Path="Lib2" />
    <Binding Path="LabelStringFormat" Source="{DynamicResource Texts}" />
</MultiBinding>

使用IValueConverter执行String.Format((string)values[2], values[0], values[1])格式设置。

票数 0
EN

Stack Overflow用户

发布于 2014-08-11 16:40:52

我不认为您需要在MultiBinding.StringFormat属性上使用绑定。相反,你能做这样的事吗?

代码语言:javascript
复制
<Label.Content>
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{DynamicResource Texts.LabelStringFormat}">
                <Binding Path="Lib1" />
                <Binding Path="Lib2" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Label.Content>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25247992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档