【问题标题】:WPF MultiBinding same converter with different binding pathWPF MultiBinding 具有不同绑定路径的相同转换器
【发布时间】:2012-07-20 22:04:59
【问题描述】:

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

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

在 WPF 中有什么方法可以避免这种情况下的重复代码吗?

【问题讨论】:

    标签: wpf multibinding


    【解决方案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 类。然后你可以做这样的事情+结合自动添加到“绑定”集合的“自定义”默认绑定

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2014-12-02
        相关资源
        最近更新 更多