在WPF上阅读了一些文章,我注意到Binding经常以不同的方式使用:
{Binding UserName}
绑定到UserName
类的UserViewModel
属性。{Binding Path=UserName}
与上述相同。{Binding}
。请注意,它本身使用,没有提供路径或属性名称。我已经看过这个,但不明白这与任何东西有什么关系?例如,我在the article中看到了这一点,DataTemplate
定义了这个:
<ContentControl Margin="20,10" Content="{Binding Path=CurrentProduct}" />
,然后在MainWindow.xaml
中,Binding
就像这样使用
<ContentControl Content="{Binding}" HorizontalAlignment="Center" Margin="10" />
为什么它本身只使用Binding
这是什么意思?
答案 0 :(得分:1)
Binding
类有许多属性,其中一个是Path
属性。
<ContentControl Content="{Binding Path=CurrentProduct}" />
- XAML引擎将调用默认值(无参数构造函数)并为属性Path
分配“CurrentProduct”。
<ContentControl Content="{Binding CurrentProduct}" />
- XAML引擎将解析XAML,前提是有一个构造函数可以获取Binding
类确实具有的值!
<ContentControl Content="{Binding}" />
- XAML引擎将调用默认值(无参数构造函数),并且由于没有为属性路径赋值,因此它将使用DataContext
中的值。
答案 1 :(得分:1)
以下陈述是等效的:
- 的
{Binding UserName}
绑定UserName
UserViewModel
属性{Binding Path=UserName}
与上述相同
因为以下几点。
{Binding …}
- Binding
标记扩展名用法。请注意Binding class的继承层次结构:这里是MarkupExtension
类。隐含路径
Binding
标记扩展程序使用Binding.Path
作为概念性&#34;默认属性&#34;,其中Path=
不需要出现在表达式中。如果指定带有隐式路径的Binding
表达式,则隐式路径必须首先出现在表达式中,然后才能显示任何其他bindProp=value
对,其中Binding
属性由name指定。例如:{Binding PathString}
,其中PathString
是一个字符串,其被评估为由标记扩展使用创建的Binding.Path
中的Binding
的值。您可以在逗号分隔符后附加隐含路径以及其他命名属性,例如{Binding LastName, Mode=TwoWay}
。
因此,选择使用它们是一个问题。
以下声明:
{Binding}
表示对当前来源的绑定:
- 可选地,句点(。)路径可用于绑定到当前源。例如,
Text="{Binding}"
相当于Text="{Binding Path=.}"
。&LT; ...&GT;
只要绑定已经有数据上下文(例如,,来自父元素的继承数据上下文),并且该上下文返回的任何项目或集合都适用于绑定需要进一步修改路径,绑定声明根本没有任何条款:
{Binding}
。这通常是为数据样式指定绑定的方式,其中绑定作用于集合。有关详细信息,请参阅&#34;用作绑定源的整个对象&#34; Binding Sources Overview中的部分。- Windows Presentation Foundation: Data Data Binding (WPF): Binding Declarations Overview, MSDN。
答案 2 :(得分:0)
你问的只是WPF中的XAML扩展,它通常被称为WPF数据绑定。
WPF中的数据绑定非常复杂,但您应该首先阅读WPF的MSDN Library文档,因为它非常详细,它当然是官方和最权威的资源。
我建议您首先访问MSDN Library以获取WPF数据绑定。您应该从此页面开始:Data Binding (WPF)。