2012-07-22 86 views
1

我在UI中有10个相同类型的UI控件,并且所有将使用相同的多重绑定转换器。WPF MultiBinding具有不同绑定路径的相同转换器

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

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

回答

2

“定制”默认绑定+结合您可以extend MarkupExtension,它允许你定义一个自定义转换器的包装,然后只是把它2条路径。

编辑:在你的情况下,最好直接从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> 

and voila,done。现在只是引用它作为CommonMultiBindings对象,并使用它作为:

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

可以通过分解“”到CommonMultiBindings和增加新的属性(UserBindings)将用于之间的绑定属性来同步采取进一步。

理想情况下,您需要创建一个具有style属性的自定义MultiBinding类。然后,你可以做这样的事情与被自动添加到“绑定”征收

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