WPF入门(三):简单绑定 - 绑定到页面元素

我们做个简单的页面,页面上有个lable用于显示信息,一个水平滚动条,当拖动滚动条时,在label里显示相应的值。

 

新建一个wpf应用程序项目。代码如下:

 

代码
<Window x:Class="WpfApplication2.Window1"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    Title
="Window1" Height="150" Width="623" Background="LemonChiffon">
    
<Grid Height="108" Width="577">
        
<Label  Name="label1" VerticalAlignment="Top" Content="{Binding ElementName=scrollBar1,Path= Value}" />
        
<ScrollBar Height="24" Margin="0,47,0,37" Name="scrollBar1" Width="577" Orientation="Horizontal" />
    
</Grid>
</Window>

 

 

代码很简单。在grid里有两个控件Label 和一个ScrollBar.注意 Lable 的Content属性里表达式的写法。

  "{Binding ElementName=scrollBar1,Path= Value}" 

熟悉asp.net的人很容易看出这句话的意思,他表示:Content的值等于 (元素名称为"scrollBar1" 的 属性Value)的值)。ElementName=scrollBar1,指定了页面的一个元素。我们可以看到 ScrollBar节点的Name = "scrollBar1". Path指定了要绑定属性名称"Value",如果在后置代码里,我们可以使用 scrollBar1.Value获得当前 scrollBar1的滑块位置表示的值。

 

我们看看如果不用xaml声明的绑定如何写。删除Label元素里的Content属性里的绑定描述。在该页面的后置代码的Load事件里写下面代码

 

代码
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Binding binding 
= new Binding();//新建一个绑定对象
            binding.Source 
= scrollBar1;//指定源
            binding.Path 
= new PropertyPath(ScrollBar.ValueProperty);//指定绑定到的属性

            label1.SetBinding(Label.ContentProperty, binding); //要绑定的目标对象自己设定绑定到的属性
        }

 

这段代码基本都能看得懂。虽然不一定了解具体的语法。我们依旧可以知道大概想表达什么的。这里一共有三个对象,一个文本框label1,一个是scrollBar1,一个是Binging对象。Binding对象观察 scrollBar1的属性变化。scrollBar1不知道有Binding这个对象,他首先要有 “值改变事件”,也就是说,Binding对象监听scrollBar1的ValueChanged改变事件。而label1知道有这么一个 “观察scrollBar1变化的中介”,于是他把自己和Binding这个中介关联起来(label1.SetBinding方法)。这样的话,Binding中介会在有消息的时通知lable1,lable1及时更新自己保持(显示)的值(Content)。 这应该就是设计模式里的“观察者模式”。

 

WCF框架封装了内部的实现,我们可以想象到的写约定有:

1.scrollBar1要有值改变事件,使得 当自己的值改变时 及时通知给 事件的订阅者。

2.lable1要 订阅 Binding 的消息,使得当 Binding有新消息时,及时更新自己的显示。

 

如果是在winfrom里应编码的话,我们肯定会考虑 订阅scrollBar1.ValueChanged事件,然后在事件里获得scrollBar1.Value,设置这个值到Lable.Text上。这里提供了更简单的写法。

 

Title

下面引用 msdn里关于Binding的描述结束本文,有兴趣的可以深入的了解相关知识。

 

Windows Presentation Foundation (WPF) 数据绑定为应用程序表示数据和与数据交互提供了一种简单而一致的方法。通过数据绑定,您可以对两个不同对象的属性值进行同步。

若要建立绑定,请使用 Binding 类或一个从 BindingBase 继承的其他类。不论要绑定的对象和数据源的特性是什么,每个绑定都遵循下图所示的模型。

 

 

该图演示以下基本的 WPF 数据绑定概念。

  • 每个绑定通常都具有四个组件:绑定目标对象、目标属性、绑定源,以及要使用的绑定源值的 Path。例如,如果希望将 TextBox 的内容绑定到 Employee 对象的 Name 属性,则目标对象是 TextBox,目标属性是 Text 属性,要使用的值是 Name,源对象是 Employee 对象。

  • 目标属性必须为依赖项属性。这同时意味着无法绑定字段。UIElement 对象的大多数属性都是依赖项属性,而大多数依赖项属性(除了只读属性)默认情况下都支持数据绑定。(只有 DependencyObject 类型可以定义依赖项属性,所有 UIElement 对象都是从 DependencyObject 派生的。)

  • 尽管图中并未指出,但请注意,绑定源对象并不限于自定义 CLR 对象。WPF 数据绑定支持 CLR 对象和 XML 形式的数据。为了举例起见,您的绑定源可以是 UIElement、任何列表对象、与 ADO.NET 数据或 Web 服务关联的 CLR 对象,也可以是包含 XML 数据的 XmlNode。

使用 Mode 属性可以指定数据流的方向。若要检测单向绑定或双向绑定中的源更改,源必须实现适当的属性更改通知机制,例如 INotifyPropertyChanged。有关示例,请参见如何:实现属性更改通知UpdateSourceTrigger 属性指定源更新的执行时间。有关更多信息,请参见数据绑定概述中的“基本数据绑定概念”。v

 

待续....

posted on 2011-01-13 17:27  张云飞VIR  阅读(1351)  评论(1编辑  收藏  举报