在我的WPF项目中,我有一个ListBox,它显示来自List<string>集合的项。我想使这些项目的文本可编辑,所以我用一个ItemTemplate将它们包装成一个TextBox (可能不是最好的方法,但我对WPF还不熟悉)。我很难简单地将TextBoxes的Text属性绑定到每个项的值。最后,我偶然发现了一个使用单点或句点作为路径属性({Binding Path=.})的示例:
<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控件上显示和成功修改了属性)。我肯定漏掉了什么东西。
发布于 2012-08-03 23:46:21
例外的一点可能是,您不能双向绑定绑定源本身,因此它试图阻止您创建一个不符合您希望的行为方式的绑定。通过使用{Binding Path=.},您只需欺骗错误检测。
(而且,也并非闻所未闻的文档是错误的或不准确的,虽然我非常喜欢MSDN文档,因为它通常包含您感兴趣的关键点)
发布于 2011-03-30 15:11:12
文档指出,{Binding}等同于{Binding Path=.}。但是,它并不等同于您键入的{Binding Path}。如果包含Path属性,则必须将其分配给某物,无论是Path=.还是Path=OtherProperty。
发布于 2011-07-14 13:54:58
这些是不一样的。如果在ConsoleMessages是一个只具有{ bind }的ObservableCollection字符串的情况下绑定这个字符串,就会得到一个“双向绑定需要路径或XPath”。异常,当as {Binding Path=.}工作时。这是WPF 4.0..。
<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便士价值..。
https://stackoverflow.com/questions/5488014
复制相似问题