MultiBinding 中子绑定的转换器

Inf*_*ris 3 wpf multibinding

假设我有这个多重绑定:

<MultiBinding Converter="{StaticResource FooBarConverter}>
  <Binding Path="Foo" Converter="{StaticResource FooConverter}" />
  <Binding Path="Bar" Converter="{StaticResource BarConverter}" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)

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

这是有意的行为吗?我想绑定 2 个属性,因为我需要在将它们放入MultiValueConverter...之前至少转换其中之一。

Bob*_*ait 5

Kishore 共享链接中的开发人员得出的结论是,要创建这样的 MultiBinding,子 Bindings 必须返回与父 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>
Run Code Online (Sandbox Code Playgroud)

令人烦恼的是,您无法传递不同的值类型来处理并给出您想要的结果。(我最初尝试将布尔值传递给转换器。)

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