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

时间:2015-05-20 07:43:47

标签: c# wpf binding

正如MSDN所说:

  

可选地,句点(。)路径可用于绑定到当前   资源。例如,Text =“{Binding}”等同于Text =“{Binding   路径=}”。

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

首先

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

此示例使用message:

引发异常

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

第二

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

似乎只要有双向绑定{Binding Path =。}是必需的。尝试将代码更改为:

constexpr uint8_t arr[HUGE_SIZE + 1] = "\x00\xFF\x...";

它工作正常。关于路径绑定的原始代码也有效。

这是一个相对主题:

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