首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"{Binding Path=.}“和"{Binding}”真的相等吗?

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

Stack Overflow用户
提问于 2011-03-30 14:54:54
回答 4查看 39.2K关注 0票数 54

在我的WPF项目中,我有一个ListBox,它显示来自List<string>集合的项。我想使这些项目的文本可编辑,所以我用一个ItemTemplate将它们包装成一个TextBox (可能不是最好的方法,但我对WPF还不熟悉)。我很难简单地将TextBoxes的Text属性绑定到每个项的值。最后,我偶然发现了一个使用单点或句点作为路径属性({Binding Path=.})的示例:

代码语言:javascript
复制
<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=.}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然而,我不明白为什么简单地使用{Binding}不起作用。

它引发“双向绑定需要路径或XPath”异常,如据微软称

..。A期(.)路径可用于绑定到当前源。例如,Text="{Binding}“等效于Text=”{bindingPath=“。

有人能解释一下这种模棱两可的行为吗?

编辑:--而且,似乎{Binding Path=.}不一定提供双向绑定,因为修改文本和移动焦点并不会更新基础源(相同的源还在DataGrid控件上显示和成功修改了属性)。我肯定漏掉了什么东西。

EN

回答 4

Stack Overflow用户

发布于 2012-08-03 23:46:21

例外的一点可能是,您不能双向绑定绑定源本身,因此它试图阻止您创建一个不符合您希望的行为方式的绑定。通过使用{Binding Path=.},您只需欺骗错误检测。

(而且,也并非闻所未闻的文档是错误的或不准确的,虽然我非常喜欢MSDN文档,因为它通常包含您感兴趣的关键点)

票数 34
EN

Stack Overflow用户

发布于 2011-03-30 15:11:12

文档指出,{Binding}等同于{Binding Path=.}。但是,它并不等同于您键入的{Binding Path}。如果包含Path属性,则必须将其分配给某物,无论是Path=.还是Path=OtherProperty

票数 23
EN

Stack Overflow用户

发布于 2011-07-14 13:54:58

这些是不一样的。如果在ConsoleMessages是一个只具有{ bind }的ObservableCollection字符串的情况下绑定这个字符串,就会得到一个“双向绑定需要路径或XPath”。异常,当as {Binding Path=.}工作时。这是WPF 4.0..。

代码语言:javascript
复制
    <ItemsControl x:Name="ConsoleOutput" ItemsSource="{Binding ConsoleMessages, Mode=OneWay}" MaxHeight="400">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox Text="{Binding Path=.}" BorderThickness="0" Margin="0" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

我的2便士价值..。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5488014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档