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

120

我有一个类似于多绑定的东西

<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
1
第四种方法是使用这个答案:https://dev59.com/VXE85IYBdhLWcg3w6n90#2552911 - Johny Skovdal
4个回答

173
如果你的值仅仅是一个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>

1
@tofutim 这是因为 MultiBinding 似乎没有资源。请改用 TextBlock.Resources... - Martin Hennings
6
也许你应该将xmlns:sys="clr-namespace:System;assembly=mscorlib"添加到你的解决方案中 ;-) - c0d3b34n

124

或者,将上面两个答案结合起来:

在文档头部定义sys命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

然后:

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

使用这种方式可以避免使用“资源欺骗”并提供正确的类型。


6
需要在文档头中定义命名空间 sys,格式如下:xmlns:sys="clr-namespace:System;assembly=mscorlib" - Beauty

31

我不太理解这个问题,但有两种选择:

在你的多重绑定中加入这一行 <Binding Source="123" /> ,将123作为绑定值传递给你的转换器。

在你的MultiBinding中添加ConverterParameter="123"

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


"<Binding Source="123" />" 似乎传递了 DependencyProperty.UnsetValue。 - Josh Stribling
1
<Binding Source="123" /> 在我的情况下传递了字符串“123”,而不是我预期的整数或双精度浮点数。 - Marcel Gosselin
1
IValueConverter 中,参数被传递为 object,这意味着您需要以安全的方式将值转换为正确的类型。IValueConverter.Convert - benPearce

9

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接