WPF MultiBinding具有不同绑定路径的相同转换器

时间:2012-07-22 10:29:39

标签: wpf multibinding

我在UI中有十个相同类型的UI控件,并且都将使用相同的多重绑定转换器。

问题是我无法创建多绑定的通用样式,我可以将其应用于所有UI控件以避免重复代码,因为每个控件都将使用不同的绑定属性作为Binding传递给转换器。

WPF中是否有任何方法可以避免此方案的重复代码?

2 个答案:

答案 0 :(得分:2)

您可以extend MarkupExtension,它允许您定义自定义转换器包装器,然后使用2路径调用它。

编辑:在你的情况下,最好直接从MultiBinding继承并在构造函数中设置合理的默认值。

答案 1 :(得分:1)

我认为你有类似的东西:

<Button>
  <Button.Content>
     <MultiBinding Converter="{StaticResource conv}">
       <Binding Path="COMMON" />
       <Binding Path="SPECIFIC1" />
     </MultiBinding>
  </Button.Content>
</Button>    
<Button>
  <Button.Content>
     <MultiBinding Converter="{StaticResource conv}">
       <Binding Path="COMMON" />
       <Binding Path="SPECIFIC2" />
     </MultiBinding>
  </Button.Content>
</Button>
<Button>
  <Button.Content>
     <MultiBinding Converter="{StaticResource conv}">
       <Binding Path="COMMON" />
       <Binding Path="SPECIFIC3" />
     </MultiBinding>
  </Button.Content>
</Button>

依旧...... 这看起来很难看,我同意。 我不知道有任何替代方案,但是通过思考一点,你可以创建(imo)一个更好的解决方案:

只需创建新的CommonMultiBindings.xaml; 其中包括:

<MultiBinding Converter="{StaticResource conv}">
 </MultiBinding>
瞧,瞧,完成了。现在只需将其引用为CommonMultiBindings对象并将其用作:

<Button.Content>
  <CommonMultiBindings>
      <!--Actual bindings here-->
  </CommonMultiBindings>
</Button.Content>

你可以通过将“”分解到CommonMultiBindings并添加新属性(UserBindings)来进一步使用它,这将用于在Bindings属性之间进行同步。

理想情况下,您需要创建具有样式属性的自定义MultiBinding类。然后你可以做这样的事情+结合“自定义”默认绑定自动添加到“Bindings”集合

<Grid.Resources>
  <Style TargetType="MultiBinding">
    <Setter Property="Converter" Value="{StaticResource conv}" />
  </Style>
</Grid.Resources>