正如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:
谢谢.
似乎每当需要两种方式绑定 {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}”真的相等吗
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |