【问题标题】:Multi Silverlight databinding多 Silverlight 数据绑定
【发布时间】:2010-11-08 16:57:39
【问题描述】:

有谁知道是否可以使用模板中的多个绑定对同一属性进行绑定以及(如果不是如何实现相同的效果)

即 在表达式中绑定了文本的文本块

"{Binding Path=Contact.Title} {Binding Path=Contact.Firstname} {Binding Path=Contact.Surname}"

一站式文本属性

【问题讨论】:

    标签: c# silverlight binding


    【解决方案1】:

    没什么大不了的:

    <TextBlock>
    <Run Text="{Binding Path=Contact.Title}"/>
    <Run Text="{Binding Path=Contact.Firstname}"/>
    <Run Text="{Binding Path=Contact.Surname}"/>
    </TextBlock>  
    

    【讨论】:

    • 这适用于 Silverlight 5。最初的问题可能是 Silverlight 2 或 3。
    【解决方案2】:

    AFAIK 这是不可能的。

    这是遵循 MVVM 模式的原因之一,创建一个以您实际希望呈现的格式反映数据的中间视图,因此您将在该类上创建一个全名属性,该属性是这些字段的串联和然后绑定到那个。

    【讨论】:

    • 通过 Andrew 的解决方法是可能的,但我完全同意你的看法。只需在您的 ViewModel 中公开正确的属性(如果您遵循该模式)并消除对多重绑定和沿途任何转换器的要求。
    【解决方案3】:

    值转换器是绑定到多个值的一种解决方案: http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx#11262

    在这种情况下,您需要将 TextBlock 的 Text 属性绑定到 Contact 对象并指定您创建的自定义值转换器。转换器可以根据属性值进行字符串格式化。

    【讨论】:

    • 这不太行,因为当您绑定到的特定字段的值发生更改时,您不会在联系人对象上收到有针对性的更改通知.
    【解决方案4】:

    我认为直接在 xaml 中是不可能的。我绝对喜欢对一个属性进行多个绑定。

    然而,我学到的是,您可以使用几种不同的策略来完成与此类似的事情:

    使用堆栈面板:

    <StackPanel Orientation="Horizontal">    
        <TextBlock Text="Hello,  "/>    
        <TextBlock Text="{Binding Contact.Title}"/>    
        <TextBlock Text="{Binding Contact.Firstname}"/> 
        <TextBlock Text="{Binding Contact.Surname}"/> 
        <TextBlock Text="!"/>
     </StackPanel>
    

    使用转换器:

    <TextBlock Text="{Binding Contact, 
                      Converter={StaticResource ContactNameConverter}}"/>
    

    More Info On Converters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2011-09-14
      • 2011-11-05
      • 2011-09-12
      相关资源
      最近更新 更多