我在UI中有十个相同类型的UI控件,并且都将使用相同的多重绑定转换器。
问题是我无法创建多绑定的通用样式,我可以将其应用于所有UI控件以避免重复代码,因为每个控件都将使用不同的绑定属性作为Binding传递给转换器。
WPF中是否有任何方法可以避免此方案的重复代码?
答案 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>