【问题标题】:MultiBind string resources with StringFormat使用 StringFormat 的 MultiBind 字符串资源
【发布时间】:2014-08-06 20:32:30
【问题描述】:

我正在尝试从 TextBlock 中的本地化资源中多重绑定一个可格式化的字符串。

字符串如下所示: This record is locked for edit by {0}.

现在我想将它绑定到 TextBlock:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}">
            <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" />
            <Binding Path="Entity.LockedBy" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

但不幸的是,这只显示了实际的字符串(包含 {0})。

我怎样才能多绑定呢?最好不使用转换器(纯粹在 XAML 中)。

【问题讨论】:

    标签: c# wpf multibinding staticresource


    【解决方案1】:

    想想最初的{}StringFormat 的开始。然后可以使用下一个连续索引访问每个 Binding 值。试试这个:

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} {1}.">
                <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" />
                <Binding Path="Entity.LockedBy" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    

    当对 .NET 类或函数感到困惑时,通常最好去 MSDN,在那里您通常可以找到详细的解释和代码示例。有关使用 MultiBindings 的更多信息,请参阅 MSDN 上的 MultiBinding Class 页面。


    更新>>>

    您不能在 XAML 中使用 string 之类的 Entity {0} is locked by {1} since {2}. 作为格式 string。相反,您可以做的是在代码中格式化string 并将结果公开为您可以在UI 中数据绑定的属性。试试这样的:

    public string FormattedString
    {
        get { return string.Format(YourEntityLockedMessageTitleFormat, Val1, Val2, Val3); }
    }
    

    【讨论】:

    • 感谢您的回答,但不幸的是,这会导致以下输出(John Doe 是 Entity.LockedBy):This record is locked for edit by {0}. John Doe
    • 好的,现在我明白你对EntityLockedMessageTitleFormat 值的意思了......你不能那样使用它。该值应该是:'This record is locked for edit by'没有'{0}.'。
    • 那么,当添加第二个参数时,例如日期,这仍然无法使用?例如,我不能将以下字符串添加到我的资源中? Entity {0} is locked by {1} since {2}。那不允许我连接(以及对于其他语言来说很难看)?
    • 谢谢,我会接受您的“FormattedString”建议。赞赏!
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多