如何在多重绑定中为1个绑定传递一个常量值?


97

我有多重绑定

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

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


1
请提供任何代码段/示例?
Torsten

我认为问题的某些部分丢失了,您在上面提到的是绑定,但是问题中没有任何绑定代码。
akjoshi

1
不知何故,每次我有一个问题时,都会有人以前有完全相同的问题:)太好了!
Ignacio Soler Garcia'3

1
第四种方法是使用以下答案:stackoverflow.com/a/2552911/222134
Johny Skovdal 2014年

Answers:


146

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

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

<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>

1
@tofutim那是因为MultiBinding似乎没有资源。请改用TextBlock.Resources ...
Martin Hennings

6
也许您应该在解决方案中添加xmlns:sys =“ clr-namespace:System; assembly = mscorlib” ;-)
c0d3b34n

103

或结合以上两个答案:

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

它提供了正确的类型,而不会浪费资源。


1
需要sys在文档头定义名称空间:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty

25

我不太关注这个问题,但是有两个选择:

将行放入<Binding Source="123" />多重绑定中,会将绑定值123传递给转换器。

放入ConverterParameter="123"您的MultiBinding:

<MultiBinding Converter="{StaticResource conv}" ConverterParameter="123">


<Binding Source =“ 123” />似乎通过了DependencyProperty.UnsetValue
Josh在2015年

<Binding Source =“ 123” />传递字符串“ 123”而不是我在本例中打算使用的整数或双精度数。
Marcel Gosselin

在中IValueConverter,参数以形式传递object,这意味着您需要以安全的方式将值强制转换为正确的类型。IValueConverter.Convert
benPearce

4

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

<Binding Path="DoesNotExist" FallbackValue="123" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.