为什么这种类型绑定有奇怪的行为?

Rez*_*eni 7 c# wpf binding

正如MSDN所说:

可选地,句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}".

但在下面的两个例子中,我遇到了不同的行为:

第一:

  <StackPanel>
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
    <Grid DataContext="{Binding Path=MyString}">
      <TextBox Text="{Binding}"></TextBox>
    </Grid>
  </StackPanel>
Run Code Online (Sandbox Code Playgroud)

此示例使用消息引发异常:

"双向绑定需要Path或XPath."

第二:

  <StackPanel>
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
    <Grid DataContext="{Binding Path=MyString}">
      <TextBox Text="{Binding Path=.}"></TextBox>
    </Grid>
  </StackPanel>
Run Code Online (Sandbox Code Playgroud)

并且此示例正常运行,第一个TextBox文本更改反映到viewmodel,第一个TextBox的文本也发生了更改,但第二个TextBox文本更改后未反映到viewmodel(或第一个TextBox)!

问:我感谢任何人解释这两种情况?

注意:父控件的DataContext(如window)是一个带有Notifiable属性的简单类MyString:

谢谢.

Kyl*_*Ren 1

似乎每当需要两种方式绑定 {Binding Path=.} 时。尝试将代码更改为:

<StackPanel>
            <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
            <Grid DataContext="{Binding Path=MyString}">
                <!--<TextBox Text="{Binding}"></TextBox>-->
                <Label Content="{Binding}"/>
            </Grid>
        </StackPanel>
Run Code Online (Sandbox Code Playgroud)

而且效果很好。在原始代码上,方式绑定也可以工作。

这是一个相关主题:

“{Binding Path=.}”和“{Binding}”真的相等吗