WPF绑定何时使用哪个

时间:2015-12-24 21:15:12

标签: wpf data-binding

在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这是什么意思?

3 个答案:

答案 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)

  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 Markup Extension, MSDN

    因此,选择使用它们是一个问题。

  2. 以下声明:

      
        
    • {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)