我以为{Binding DataContext.foo}{Binding foo}是相同的,直到遇到一个将选择更改的事件从ComboBox绑定(bind)到ViewModel中的命令的问题。

我是那样做的...

<i:EventTrigger EventName="SelectionChanged">
     <cmd:EventToCommand Command="{Binding DataContext.TestCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" />
</i:EventTrigger>

仅指定DataContext.TestCommand似乎失败时,可以使用TestCommand。我从未遇到过两者之间的区别,有人可以解释吗?

最佳答案

它们绑定(bind)到两个微妙的不同事物上:
"Binding DataContext.TestCommand"绑定(bind)到TestCommandDatacontextPage属性(大概是上下文定义了该属性)。
"Binding TestCommand"绑定(bind)到TestCommand本身的Page属性,在这种情况下该属性可能不存在,这就是为什么它不起作用的原因。

有一个名为WPF Snoop的简洁程序,您可以在程序运行时使用它检查绑定(bind)(通常,当我被卡住时,它通常可以帮助我弄清事情)。

关于wpf - {Binding DataContext.foo}与{Binding foo}的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18166855/

10-13 00:11