zoukankan      html  css  js  c++  java
  • WPF笔记(6)数据绑定(DataBinding)

            数据绑定是将控件、元素与数据相结合的一种技术。控件一般都有双向的服务:显示数据给用户和允许用户改变数据。对于Checkbox,在过去编程时,需要通过编写代码将一个定义的bool变量初始化给checkbox控件。将用户对checkbox的改变返回给该变量。而现在的环境中,我们只需要将checkbox和一个变量绑定即可。绑定会自动完成交互服务。

            在简化编程时,我们经常用databinding代替event handler。尤其是在XAML下,在XAML中定义的databinding可以不需要event handler 所需要的后台事件处理代码。简单而且不易出错。

            数据绑定都有一个源(source)和目的(target)。源一般是一些数据,而目标一般是一个控件。 例如我们用一个label来表示Scrollbar的value(控件到控件的绑定)。我们可以通过事件来完成也可以通过数据绑定来完成。

    Code

         绑定语句都放在目标的绑定语句中。如上面的绑定语句就放在label的内容中:Content="{Binding ElementName=scroll, Path=Value}"
         与StaticResource和DynamicResource一样,Binding也是一个扩展标记。里面有绑定的元素(Elementname)和路径(path)。

         绑定的目标对象必须是从DependencyObject继承。绑定的属性必须返回为一个Dependency属性。上面的XAML代码可以用C#来实现。

    Binding bind = new Binding();
    bind.Source = scroll;
    bind.Path = new PropertyPath(ScrollBar.ValueProperty);
    lbl.SetBinding(Label.Content, bind);

         绑定源(Source)

         在前面的示例中,我们使用的是 ElementName 属性(它用于绑定到一个控件),而不是使用 Source 属性。然而,在大多数基于 XAML 的项目中,我们将使用Source属性绑定到除控件外的源,如 XML 或 .NET 对象。XAML 用其 provider 对象支持该操作。XAML 中内置有两种类型的数据提供程序:ObjectDataProviderXMLDataProviderObjectDataProvider 用于绑定到 .NET 对象以及从 .NET 对象绑定,XMLDataProvider 用于绑定到 XML 片段和文档以及从 XML 片段和文档进行绑定。您可以在任何 XAML 容器的资源部分中指定一个数据提供程序。

         使用 XMLDataProvider(与XML对象的绑定)

    Code

         在 StackPanel 的资源中,我们有一个 XMLDataProvider 对象。x:Key 表示 Binding 对象中用来引用它的名称。在该提供程序中,我们创建了 XML 内联,用作数据绑定的源。在 ListBoxBinding 中,使用了绑定的 Source属性。如果某个数据源位于 XAML 文档中,您需要指定该对象是一个静态源。最后,我们使用 XPath 语句指定应该使用 XML 文档中的哪个集合来填充 ListBox

         XMLDataProviderSource 属性可以使用路径或 URL 来查找 XML 的源,也可以使用标准的URL。如:<XmlDataProvider x:Key="FavoriteColors" Source="D:\colors.xml" />

    <XmlDataProvider x:Key="MyRSS" Source="http://www.google.com/RSS" />

    使用 ObjectDataProvider(与.NET对象的绑定)

         到.NET 对象的绑定需要使用 ObjectDataProvider。该数据提供程序使您能够为 .NET 数据类型创建绑定。

    例如,我们可以在 .NET 中创建一个简单的字符串集合,如下所示。

    public class MyStrings : List
    {
    public MyStrings()
    {
    this.Add("Hello");
    this.Add("Goodbye");
    }
    }
    

    导入了命名空间和类之后,就使用 ObjectDataProvider 指定来自其中一种类型的数据源。

    Code

    也可以通过要使用的命名空间和类型指定一个 XAML 元素,来创建资源。

    如:

    Code

     该语法的工作方式就像 ObjectDataSource 一样,只不过更易于使用。既然已经导入了命名空间,

    我们就可以添加一个引用我们的数据源类的资源了,方法是指定该类的名称(例如, MyStrings)。

    数据绑定与前面的示例相同,因为 XAML 代码并不关心它是何种数据源,只要是数据源就可以了。

         绑定模式

         在大多数情况下,您希望绑定是一个双向绑定。Binding 对象支持几种模式以支持不同的用例,如表 所示。

    绑定模式
    绑定模式说明

    TwoWay

    双向移动绑定控件或绑定源的改动。(这是默认模式。)

    OneWay

    仅将改动从源移动到控件。当源发生改动时,绑定控件的数据也相应更改。

    OneTime

    数据仅在启动时绑定,第一次用数据填充控件后忽略对源的更改。

    在标记中包括模式即可指定模式,如下所示。

    {Binding ElementName=theTextBox, Path=Text, Mode=OneTime}
    

         控制绑定时间

    除了模式,您还可以使用UpdateSourceTrigger 指定绑定何时推出更改。您可以指定绑定仅在指定的时间进行更改,方法是指定 UpdateSourceTrigger 类型。

    {Binding ElementName=theTextBox, Path=Text, UpdateSourceTrigger=LostFocus}。

    UpdateSourceTrigger 属性指定何时用改动更新源。这仅对 Mode=TwoWay 绑定(默认方式)有效。下表显示 UpdateSourceTrigger 的有效值。

    表 UpdateSourceTrigger 值
    UpdateSourceTrigger说明

    Explicit

    源仅通过显式调用 BindingExpression.UpdateSource 方法更新。

    LostFocus

    绑定控件失去焦点时更新源。

    PropertyChanged

    每次属性更改时都将改动更新到源。这是默认行为。

         使用 DataContext

         DataContext 专门用于指定某个容器中的所有控件都将绑定到一个公共对象。

    以下是一个示例:我们有一个 Canvas,它将显示 XML 文档中特定节点的值和文本。

    Code

    通过将DataContext 设置为 XML 文档(以及一个特定的 XPath 表达式),告诉 Canvas:其中所有不包含 Source 的控件

    都可以使用容器的 DataContext这样,只需指定 XPath 表达式就能绑定 TextBlock。请注意,每个 TextBlock 中的 XPath 表达式都是相对的 XPath 表达式。

    这对于对象绑定也一样。

    使用对象代替 XML 仅仅意味着您将使用 Path 表达式代替 XPath 表达式。

    Code
     msdn:http://msdn.microsoft.com/zh-cn/library/ms752347.aspx
  • 相关阅读:
    css知识点
    javascript 中闭包
    javascript 继承方法总结
    css滚动滚轮事件
    关于闭包的总结
    xpth xslt
    好的js函数
    自动化测试实施(4)
    自动化测试实施(5)
    自动化测试实施(3)
  • 原文地址:https://www.cnblogs.com/jyz/p/1296050.html
Copyright © 2011-2022 走看看