将一个属性数据绑定到两个依赖属性中的一个
时间:2020-03-06 14:29:32 来源:igfitidea点击:
我有两个类似于节点的自定义控件,以及在节点之间绘制链接的控件。
我希望两个控件都尽可能用xaml编写。该链接将两个节点都存储为依赖项属性,每当节点移动时,我就使用数据绑定在节点之间移动线。
能够根据两个节点之间的距离来更改线条的其他值(例如笔触宽度)会很棒。因此,当任何一个节点移动时,该属性都需要更新,而我无法完全理解它的工作方式。
任何人有任何想法吗?
解决方案
我们可以在链接类中定义属性StrokeWidth,每次节点移动时都会对其进行计算,然后将适当的style属性绑定到该属性。
我想我们也可以尝试使用DataTriggers进行操作,但是它们需要特定的值才能使用,不能使用任何类型的表达式。这将使解决方案很难很好地扩展到节点之间的各种距离。
我们可以尝试执行以下操作:
- 如上一篇文章中所述,在链接类上定义宽度,笔触(无论我们需要什么)属性
- 定义应用于该属性的多重绑定,将两个节点传递给它的绑定应类似于:
<Multibinding Converter="{StaticResource converter}"> <Binding Path="Node1" RelativeSource|Source.../> <Binding Path="Node2" ... /> </Multibinding>
- 实现接口IMultiValueConverter,该接口将基本上根据节点之间的距离来计算笔触的外观。
- 在xaml中,创建转换器的实例,并将其添加到多重绑定的Converter属性中。
该解决方案的优点是,我们拥有非常清晰的类模型,并且每个类都执行简单的任务。此外,以后,我们可以配置转换器类以支持额外的情况,而无需接触节点类,因为节点类很简单,仅用于显示节点。
通常,每当必须将多个属性值映射到另一个属性时,就必须使用多重绑定和转换器。