WPF学习:绑定

一。绑定到元素对象

     1。元素和元素(XAML、代码)

        1.1XAML格式

        目标属性="{Binding ElementName=源控件, Path=源属性, Mode=…}"

        1.2代码:


         Binding binding = new Binding(); 
         binding.Source = 源控件; 
         binding.Path = new PropertyPath("Value");    //源控件属性
         binding.Mode = BindingMode.TwoWay; 
         lblSampleText.SetBinding(TextBlock.FontSize, binding); 绑定。

         1.3 演示程序…

二。绑定到非元素对象(Source/RelativeSource/DataContext)。

     1。Source

       1.1绑定到静态对象

           FontSize="{Binding Source={x:Static 静态对象},

                          Path=静态对象的属性}

       1.2绑定到资源。

           FontFamily="{Binding Source={StaticResource 资源名称},

                             Path=资源对象的属性}" 

       演示例子…  

     2。RelativeSource:根据当前对象为基础,自动查找源并绑定。

        2.1  ="{Binding RelativeSource=

                       {RelativeSource Mode=FindAncestor,

                                             AncestorType={x:Type Window}},

                         Path=Title}"

         2.2 RelativeSourceMode枚举值

名 称

描 述

Self

表达式绑定到同一元素的另外一个属性上(在第10

章介绍了这一技术的一个示例,其中使用该技术在

触发命令的控件中显示与命令相关联的文本)

FindAncestor

表达式绑定到父元素。WPF将会查找元素树直到发

现期望的父元素。为了指定父元素,还必须设置

AncestorType属性指示希望查找的父元素的类型。

此外,还可以使用AncestorLevel属性略过发现的一

定数量的特定元素。例如,当在一棵树中查找时,

如果希望绑定到第三个ListBoxItem类型的元素,

应当进行如下设置:AncestorType={x:Type ListBoxItem},

并且AncestorLevel=3,所以会略过前两个ListBoxItem

元素。默认情况下,AncestorLevel属性设置为1,

并且在找到第一个匹配的元素时停止查找

PreviousData

表达式绑定到数据绑定列表中的前一个数据项。

在一个列表项中会使用这种模式

TemplateParent

表达式绑定到应用模板的元素。只有当绑定位于一

个控件模板或数据模板内部时,这种模式才能工作

     3。DataContext

         所有的子对象可以共享一个绑定源。

         父对象 = DataContext="{Binding ElementName=wndBindingType}"

         子对象 = FontSize="{Binding Path=绑定源的一个属性}"

三。绑定的方向

BindingMode枚举值

名 称

描 述

OneWay

当源属性变化时更新目标属性

TwoWay

当源属性变化时更新目标属性,

并且当目标属性变化时更新源属性

OneTime

最初根据源属性值设置目标属性。然而,

在此之后的所有改变都会被忽略(除非绑定

被设置到一个完全不同的对象或者调用

BindingExpression.UpdateTarget( )方法,

如在本章后面所介绍的那样)。通常,如果

知道源属性不会变化,可以使用这种模式降低开销

OneWayToSource

和OnWay类型类似,但是方向相反。当目标

属性变化时更新源属性(这看起来有点像向后传递),

但是目标属性永远不会被更新

Default

这种类型的绑定依赖于目标属性。它既可以

是双向的(对于用户可以设置的属性,如

TextBox.Text属性),也可以是单向的(对于

所有其他属性)。除非明确指定了另外一种模式,

否则所有的绑定都使用该模式

方向:

clip_image001

图16-5  绑定两个属性的不同方向

     5。重要类

        5.1 BindingOperations:清楚绑定、设置绑定、获取绑定表达式

        5.2 BindingExpression:UpdateSource( )方法和UpdateTarget( )方法。

             5.2.1 获取

隐藏行号 复制代码 这是一段程序代码。
  1. // Get the binding that's applied to the text box.  
    
  2. BindingExpression binding = txtFontSize.GetBindingExpression(TextBox.TextProperty);   
    
  3. // Update the linked source (the TextBlock).  
    
  4. binding.UpdateSource(); 
    

        5.3“x:Static” 根据目标对象的类型,从静态对象、属性中取值。返回值:对象/数值。

        

     6。总结:

         属性值更改需要实现:INotifyPropertyChanged

         集合更改(添加删除)需要实现:INotify CollectionChanged

         元素到元素的绑定依赖于依赖的属性,注册依赖属性时的属性值变更通知。

四。自定义类

     1。更新实现

         1.1属性依赖属性

         1.2INotifyPropertyChanged

五集合绑定

ItemsControl类中用于数据绑定的属性(唯一的要求是支持IEnumerable接口)

名 称

描 述

ItemsSource

指向一个集合,该集合包含所有在列表中显示的对象

DisplayMemberPath

标识一个用于为每个项创建显示文本的属性

ItemTemplate

接受一个数据模板,用于为每个项创建可视化外观。

这个属性比DisplayMemberPath属性的功能更加强大,

ItemsControl(ListBox控件、ComboBox控件以及ListView控件(以及Menu控件和用于显示层次化数据的TreeView控件))。

 

二。值转换器。

    IValueConverter接口的类

clip_image001[1]

转换绑定的数据

 

<Binding Path="Code"> 

<Binding.Converter> 

<local:PriceConverter></local:PriceConverter> 

</Binding.Converter> 

</Binding> 

三。数据模板的使用

 数据模板通常会被应用到以下几类控件来填充其类型为DataTemplate的属性:

  ·     内容控件(Content Control):ContentTemplate属性,控制Content的显示

  ·     项控件(Items Control) : ItemTemplate属性,应用于每个显示的项

  ·     头控件(Header Content Control) : HeaderTemplate属性,控制Header的展现。

四。视图

     1。过滤

     2。排序

     3。分组

五。数据提供程序

    1。绑定到一个实例上

    1.ObjectDataProvider可以绑带构造函数带参数的对象。

    2。可以绑定到方法

 

<local:BQItems x:Key="BQs"/>
<ObjectDataProvider x:Key="dataProviderBQ"
                    ObjectInstance="{StaticResource BQs}">
</ObjectDataProvider>

 

<ObjectDataProvider x:Key="dpHasParameter" ObjectType="{x:Type local:BQItems}">
    <ObjectDataProvider.ConstructorParameters>
        <sys:Int32>23</sys:Int32>
    </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

posted @ 2010-06-30 16:33  SouthAurora  Views(4553)  Comments(0Edit  收藏  举报