在MultiBinding
中,如果DataContext设置为VM1
,并且C
是其属性,是否可以对不同的DataContext(如VM2
)进行第二次绑定,并将其绑定到VM2
中的D
属性?
<MultiBinding Converter="{StaticResource UnitConverter}">
<Binding Path="C"/>
<Binding Path="D"/>
</MultiBinding>
快速回答,是的!例如,如果您有一个带有Datacontext
VM2的网格,并且在其中有一个具有Datacontext
VM1的Stackpanel。现在,您可以使用RelativeSource
通过向上遍历可视化树来获得正确的Datacontext
。我不在我的windows笔记本电脑atm上,但它应该是这样的。。
<MultiBinding Converter="{StaticResource UnitConverter}">
<Binding Path="DataContext.D" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Grid}"/>
<Binding Path="C"/>
</MultiBinding>
我希望这能帮助
这个问题也可能有帮助:如何在多绑定中获得父值
对不起。确切的答案是"不可能"。您所说的是不可能的,因为数据上下文被设置为某个视图模型,比如VM1
,并且模板将只在该数据上下文中寻找一些属性。
<MultiBinding Converter="{StaticResource UnitConverter}">
<Binding Path="C"/>
<Binding Path="D"/>
</MultiBinding>
在上面的代码中,C和D应该在同一个数据上下文中。或者,您需要创建一个包含子视图模型属性的新视图模型,以便可以访问子视图模型的属性,如下所示:
<MultiBinding Converter="{StaticResource UnitConverter}">
<Binding Path="VM1.C"/>
<Binding Path="VM2.D"/>
</MultiBinding>
其中VM1和VM2是作为数据上下文视图模型中的属性创建的视图模型实例。