在WPF中多绑定到两个不同的DataContexts

时间:2016-07-21 21:52:28

标签: wpf xaml data-binding datacontext multibinding

MultiBinding中,如果DataContext设置为VM1C是其属性,是否可以对{{1}之类的其他DataContext进行第二次绑定并将其绑定到VM2中的D属性?

VM2

2 个答案:

答案 0 :(得分:4)

快速回答,是的!例如,如果你有一个带有Datacontext VM2的网格,并且在其中你有一个带有Datacontext VM1的Stackpanel。现在,您可以使用RelativeSource通过可视化树向上移动来获取正确的Datacontext。 我不是在我的Windows笔记本电脑上,但看起来应该是这样的......

<MultiBinding Converter="{StaticResource UnitConverter}">
    <Binding Path="DataContext.D" RelativeSource={RelativeSource Mode=FindAncestor, TargetType=Grid/>
    <Binding Path="C"/>
</MultiBinding>

我希望这有帮助

这个问题也可能有所帮助:How to get a parent value in multibinding

答案 1 :(得分:2)

对不起确切的答案是不可能。 您所说的是不可能的,因为datacontext设置为某个视图模型,如Server=10.10.10.123,1433\myInstanceName; ,模板将仅在该数据上下文中查找某些属性。

VM1

在上面的代码中,C和D应该在同一个datacontext中。否则,您需要创建一个包含子视图模型属性的新视图模型,以便可以访问子视图模型属性,如下所示:

<MultiBinding Converter="{StaticResource UnitConverter}">
        <Binding Path="C"/>
        <Binding Path="D"/>
</MultiBinding>

其中VM1和VM2是在datacontext视图模型中作为属性创建的视图模型实例。