【问题标题】:Can we concat two properties in data binding?我们可以在数据绑定中连接两个属性吗?
【发布时间】:2011-05-18 13:10:18
【问题描述】:

我们可以在绑定表达式中将两个属性连接在一起吗?如果可能不使用转换器或不编写两个文本块并单独设置它们?

【问题讨论】:

标签: wpf silverlight-4.0


【解决方案1】:

如果您想在单个TextBlock 中显示FirstNameLastName,那么您可以这样做:

<TextBlock>
     <Run Text="{Binding FirstName}" />
     <Run Text="   " /> <!-- space -->
     <Run Text="{Binding LastName}" />
</TextBlock>

现在,TextBlock 的 Text 属性将是 "Sachin Tendulkar",并且将在以下情况下显示:

FirstName = Sachin
LastName  = Tendulkar

希望对您有所帮助。

【讨论】:

  • 正是我需要的。谢谢!
  • 您忘记了每个 Run 语句中 > 之前的 /。否则,对我帮助很大!
  • 天才就是简单!
  • 文档链接:Run class - UWP reference
【解决方案2】:
<TextBlock.Text>
   <MultiBinding StringFormat="{}{0} , {1}">
     <Binding Path="data1" />
     <Binding Path="data2" />
    </MultiBinding>
</TextBlock.Text>

data1 和 data2 是绑定的字符串属性。

【讨论】:

  • 这是一个很好的解决方案,因为它适用于更复杂的组件,例如DataGrid.TextColumn
【解决方案3】:

就像 alpha-mouse 暗示 MultiBinding 不能开箱即用,但是这个家伙已经把一些东西放在一起可能会有所帮助:

http://www.olsonsoft.com/blogs/stefanolson/post/Improvements-to-Silverlight-Multi-binding-support.aspx

如果这看起来有点无赖,那么也许尝试在您的对象上放置一个组合值属性作为绑定机制的助手,例如:

public string FullName {
   get { return this.FirstName + " " + this.LastName; }
}

【讨论】:

  • 使用&lt;TextBlock&gt;&lt;Run Text="..." /&gt;&lt;Run Text="..." /&gt;&lt;/TextBlock&gt; 是一种更简洁的仅限 XAML 的解决方案(请参阅下面的其他答案)。
【解决方案4】:

在 WPF 中借助 MultiBinding 和 StringFormat 是可能的。但不幸的是,Silverlight 中没有。

【讨论】:

    【解决方案5】:

    如果您需要添加任何字符串,请尝试一下。这里我在windows phone中绑定文本后加上“%”。

    <TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>
    

    【讨论】:

      【解决方案6】:

      您可以使用执行连接的 getter 添加新属性。

      假设您有 FirstNameLastName 属性。然后您可以定义一个Name 属性,如下所示:

      public string Name { get { return FirstName + " " + LastName; } }
      

      这会很好用,但您应该知道您不能对只读属性进行双向绑定。此外,您可能希望在源属性的设置器中为串联属性实现属性更改通知。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 2020-08-22
        • 2016-08-02
        • 2011-05-04
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多