我以为{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)到TestCommand
的Datacontext
的Page
属性(大概是上下文定义了该属性)。"Binding TestCommand"
绑定(bind)到TestCommand
本身的Page
属性,在这种情况下该属性可能不存在,这就是为什么它不起作用的原因。
有一个名为WPF Snoop的简洁程序,您可以在程序运行时使用它检查绑定(bind)(通常,当我被卡住时,它通常可以帮助我弄清事情)。
关于wpf - {Binding DataContext.foo}与{Binding foo}的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18166855/