【发布时间】:2012-07-20 22:04:59
【问题描述】:
我在一个 UI 中有十个相同类型的 UI 控件,它们都将使用相同的多绑定转换器。
问题是我无法为多重绑定创建一个通用样式,我可以将其应用于所有 UI 控件以避免重复代码,因为每个控件将使用不同的绑定属性作为绑定传递给转换器。
在 WPF 中有什么方法可以避免这种情况下的重复代码吗?
【问题讨论】:
标签: wpf multibinding
我在一个 UI 中有十个相同类型的 UI 控件,它们都将使用相同的多绑定转换器。
问题是我无法为多重绑定创建一个通用样式,我可以将其应用于所有 UI 控件以避免重复代码,因为每个控件将使用不同的绑定属性作为绑定传递给转换器。
在 WPF 中有什么方法可以避免这种情况下的重复代码吗?
【问题讨论】:
标签: wpf multibinding
我假设你有这样的东西:
<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>
【讨论】:
您可以extend MarkupExtension,它允许您定义一个自定义转换器包装器,然后只需使用 2 个路径调用它。
编辑:在您的情况下,最好直接从 MultiBinding 继承并在构造函数中设置合理的默认值。
【讨论】: