gpt4 book ai didi

c# - 为什么这种类型绑定(bind)有奇怪的行为?

转载 作者:太空狗 更新时间:2023-10-29 20:39:04 26 4
gpt4 key购买 nike

作为MSDN说:

Optionally, a period (.) path can be used to bind to the current source. For example, Text="{Binding}" is equivalent to Text="{Binding Path=.}".

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

首先:

  <StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding}"></TextBox>
</Grid>
</StackPanel>

此示例引发异常并显示消息:

“双向绑定(bind)需要 Path 或 XPath。”

第二:

  <StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding Path=.}"></TextBox>
</Grid>
</StackPanel>

此示例运行正常,第一个 TextBox 文本更改反射(reflect)到 viewmodel,第一个 TextBox 的文本也更改,但是当第二个 TextBox 文本更改时,未反射(reflect)到 viewmodel(或第一个 TextBox)!

问题:有人能解释一下这两种情况吗?

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

谢谢。

最佳答案

似乎只要有两种方式绑定(bind) {Binding Path=.} 是必需的。尝试将代码更改为:

<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<!--<TextBox Text="{Binding}"></TextBox>-->
<Label Content="{Binding}"/>
</Grid>
</StackPanel>

而且效果很好。在原始代码上,绑定(bind)方式也有效。

这是一个相关的话题:

Are "{Binding Path=.}" and "{Binding}" really equal

关于c# - 为什么这种类型绑定(bind)有奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com