2

假设我有这个 MultiBinding:

<MultiBinding Converter="{StaticResource FooBarConverter}>
  <Binding Path="Foo" Converter="{StaticResource FooConverter}" />
  <Binding Path="Bar" Converter="{StaticResource BarConverter}" />
</MultiBinding>

这似乎不起作用:传递给FooBarConverter的值数组包含DependencyProperty.UnsetValue每个值(在本例中为两个)。删除子绑定(FooConverterBarConverter)上的转换器给了我实际值。顺便说一句:这些转换器被正确调用,看起来它们的结果被丢弃了。

这是预期的行为吗?我想绑定 2 个属性,因为我需要至少转换其中一个,然后再将它们扔到MultiValueConverter...

4

3 回答 3

4

Kishore 共享链接中的开发人员得出的结论是,要制作这样的 MultiBinding,子 Binding 必须返回与父 MultiBinding 相同类型的结果。因此,就我而言,如果我希望父 MultiBinding 返回 Visibility 类型的值,则子 Bindings 也必须返回 Visibility 值。不这样做会将 UnsetValues 传递给您的转换器方法,可能会给您带来不希望的结果。

这是一段对我有用的代码。请注意,转换器 "VisibleIfTrue" 和 "EnumToVisibility" 都返回类型 Visibility 值:

<Grid.Visibility>
    <MultiBinding Converter="{StaticResource MultiVisibilityConverter}">
        <Binding Path="JobHasData" Converter="{StaticResource VisibleIfTrue}" />
        <Binding Path="CurrentMode" Converter="{StaticResource EnumToVisibility}" ConverterParameter="{x:Static Mode.Setup}" />
    </MultiBinding>
</Grid.Visibility>

令人讨厌的是,您不能将不同的值类型传递给它来处理并给您想要的结果。(我最初试图将布尔值传递给转换器。)

希望这对等待七年答案的人有所帮助。;)

于 2017-04-20T20:34:41.930 回答
0

you have mention converter in the Multibinding tag like this

<TextBlock Grid.Row="3" Grid.Column="1" Padding="5">
    <TextBlock.Text>
      <MultiBinding Converter="{StaticResource sumConverter}">
        <Binding  Path="FirstNum" />
        <Binding  Path="SecondNum" />
        <Binding   Path="ThirdNum" />
      </MultiBinding>
    </TextBlock.Text>
  </TextBlock>
于 2010-04-29T11:48:25.000 回答
0

如果 WPF 是 4.0 之前的版本,那么它是一个已知且已修复的错误,有解决方法。

此处为被迫使用旧版本的穷人提供了解决方法的示例实现。

简而言之,旧的 wpf 版本正在尝试将具有转换器的多重绑定子绑定中的值直接转换为目标依赖属性的类型。解决方法是创建隐藏标签,将多重绑定或其子绑定转换器移动到 label.content 作为它期望的对象,然后将所需的属性绑定到它。

于 2017-11-16T13:55:08.677 回答