【发布时间】:2010-04-17 00:11:16
【问题描述】:
我遇到了多重绑定问题:
<Canvas>
<local:SPoint x:Name="sp" Width="10" Height="10">
<Canvas.Left><!-- irrelevant binding here --></Canvas.Left>
<Canvas.Top>
<MultiBinding Converter="{StaticResource myConverter}" Mode="TwoWay">
<Binding ElementName="cp1" Path="(Canvas.Top)"/>
<Binding ElementName="cp1" Path="Height"/>
<Binding ElementName="cp2" Path="(Canvas.Top)"/>
<Binding ElementName="cp2" Path="Height"/>
<Binding ElementName="sp" Path="Height"/>
<Binding ElementName="sp" Path="Slope" Mode="TwoWay"/>
</MultiBinding>
</Canvas.Top>
</local:SPoint>
<local:CPoint x:Name="cp1" Width="10" Height="10" Canvas.Left="20" Canvas.Top="150"/>
<local:CPoint x:Name="cp2" Width="10" Height="10" Canvas.Left="100" Canvas.Top="20"/>
</Canvas>
为了计算 Canvas.Top 值,myConverter 需要所有绑定值。这在 Convert() 中效果很好。换一种方式,myConverter 应该理想地计算 Slope 值(其余的为 Binding.DoNothing),但除了传递给 ConvertBack() 的 Canvas.Top 之外,它还需要其他值。解决这个问题的正确方法是什么?
我尝试过绑定 OneWay 并为 local:SPoint.Slope 创建一个额外的多重绑定,但这会导致无限递归和堆栈溢出。我在想 ConverterParameter 可以使用,但似乎无法绑定到它。
【问题讨论】:
标签: c# wpf data-binding xaml