【问题标题】:How can I pass a constant value for 1 binding in multi-binding?如何在多绑定中为 1 绑定传递常量值?
【发布时间】:2011-03-21 10:16:35
【问题描述】:

我有一个多重绑定之类的

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="myFirst.Value" />
            <Binding Path="mySecond.Value" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

我想传递一个固定值,例如“123”到上述两个绑定之一。如何使用 XAML 做到这一点?

【问题讨论】:

  • 请提供任何代码 sn-ps/示例?
  • 我认为问题的某些部分丢失了,您指的是上面的绑定,但我没有在问题中看到任何绑定代码。
  • 不知何故,每次我有一个问题,有人以前有完全相同的问题 :) 太好了!
  • 第四种方法是使用这个答案:stackoverflow.com/a/2552911/222134

标签: wpf binding multibinding


【解决方案1】:

或者,结合上面的两个答案:

<MultiBinding Converter="{StaticResource ScalingConverter}">
    <Binding>
        <Binding.Source>
            <sys:Double>0.5</sys:Double>
        </Binding.Source>
    </Binding>
    <Binding ElementName="TC" Path="ActualWidth" />
</MultiBinding>

它提供了正确的类型而没有资源组合。

【讨论】:

  • 需要在文档头部定义命名空间sysxmlns:sys="clr-namespace:System;assembly=mscorlib"
【解决方案2】:

我并不是说这是一个特别好的答案,但这是另一种方法:

<Binding Path="DoesNotExist" FallbackValue="123" />

【讨论】:

    【解决方案3】:

    如果您的值只是一个string,您可以在绑定的Source 属性中将其指定为常量。如果是其他原始数据类型,则需要定义一个静态资源并引用这个。

    在 XAML 的根目录中定义 sys 命名空间以指向 mscorlib 中的 System,以下应该可以工作:

    <TextBlock>
      <TextBlock.Resources>
        <sys:Int32 x:Key="fixedValue">123</sys:Int32>
      </TextBlock.Resources>
      <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
          <Binding Path="myFirst.Value" />
          <Binding Source="{StaticResource fixedValue}" />
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>
    

    【讨论】:

    • @tofutim 那是因为 MultiBinding 似乎没有资源。改用 TextBlock.Resources...
    • 也许您应该将 xmlns:sys="clr-namespace:System;assembly=mscorlib" 添加到您的解决方案中;-)
    【解决方案4】:

    我不太明白这个问题,但有两种选择:

    &lt;Binding Source="123" /&gt; 行放入您的多重绑定中,会将123 作为绑定值传递给您的转换器。

    ConverterParameter="123" 放入您的 MultiBinding:

    &lt;MultiBinding Converter="{StaticResource conv}" ConverterParameter="123"&gt;

    【讨论】:

    • 似乎通过了 DependencyProperty.UnsetValue
    • 传递字符串“123”,而不是我想要的整数或双精度。
    • IValueConverter 中,参数作为object 传递,这意味着您需要以安全的方式将值转换为正确的类型。 IValueConverter.Convert
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多