zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    Java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    Java23种设计模式
    第三次作业
  • 原文地址:https://www.cnblogs.com/SouthAurora/p/1768464.html
Copyright © 2011-2022 走看看