wpf数据绑定.docx

上传人:b****3 文档编号:2169159 上传时间:2022-10-27 格式:DOCX 页数:21 大小:49.82KB
下载 相关 举报
wpf数据绑定.docx_第1页
第1页 / 共21页
wpf数据绑定.docx_第2页
第2页 / 共21页
wpf数据绑定.docx_第3页
第3页 / 共21页
wpf数据绑定.docx_第4页
第4页 / 共21页
wpf数据绑定.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

wpf数据绑定.docx

《wpf数据绑定.docx》由会员分享,可在线阅读,更多相关《wpf数据绑定.docx(21页珍藏版)》请在冰豆网上搜索。

wpf数据绑定.docx

wpf数据绑定

WPF中的数据绑定

 目录

数据绑定细节

创建简单的绑定

绑定模式

绑定的时间

绑定到XML

对象绑定和DataTemplates

对数据进行排序

欢迎试用和反馈

到目前为止,很多人都知道使用Windows®PresentationFoundation(WPF)可以轻松地设计强大的用户界面。

但是您可能并不知道它还提供了强大的数据绑定功能。

使用WPF,可以通过利用Microsoft®.NETFramework代码、XAML或两者的组合进行数据操作。

您可以绑定控件、公共属性、XML或对象,从而使数据绑定比以前更快捷、灵活和简单。

所以,让我们来看一下如何开始将控件绑定到您所选的数据源中。

数据绑定细节

要使用WPF数据绑定功能,您必须始终要有目标和源。

绑定的目标可以是从DependencyProperty派生而来的任何可访问属性或元素,例如TextBox控件的Text属性。

绑定的源可以是任何公共属性,包括其他控件、公共语言运行库(CLR)对象、XAML元素、ADO.NETDataset、XML片段等的属性。

为了帮助您正确实现绑定,WPF包含了两个特殊的提供程序:

XmlDataProvider和ObjectDataProvider。

现在让我们看一下WPF数据绑定技术的工作原理,我将列举一些实用的示例来说明它们的用法。

创建简单的绑定

首先,我们来看一个简单的示例,该示例说明了如何将TextBlock的Text属性绑定到ListBox的选定项。

图1中的代码显示的是声明了六个ListBoxItem的ListBox。

该代码示例中的第二个TextBlock具有名为Text(使用XML子元素在XAML属性元素语法中指定)的属性,它将包含TextBlock的文本。

Text属性声明了通过标记与ListBox选定项的绑定。

Binding标记的ElementName属性指示TextBlock的Text属性要与其绑定的控件的名称。

Path属性指示我们将绑定到的元素(在本例中是ListBox)的属性。

此代码产生的结果是,如果从ListBox选择了一种颜色,该颜色的名称则会在TextBlock中显示。

 Figure 1 基本但详细的控件绑定

复制代码

"

TextWrapping="Wrap"/>

Name="lbColor"Width="248"Height="56">

"/>

为了使用简单的语法来进行数据绑定,可以对图1中列出的代码稍加修改。

例如,我们用下列代码段替代TextBlock的标记:

复制代码

Text="{BindingElementName=lbColor,

Path=SelectedItem.Content}"/>

这种语法称为属性语法,它压缩了TextBlock的Text属性内部的数据绑定代码。

基本上,Binding标记会连同它的属性一起被归入大括号内。

绑定模式

我可以继续以上述示例为例,将TextBlock的背景色绑定到在ListBox中选择的颜色。

以下代码可将Background属性添加到TextBlock中,并使用该属性的绑定语法将其绑定到ListBox中选定项的值:

复制代码

Text="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=OneWay}"

x:

Name="tbSelectedColor"

Background="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=OneWay}"/>

如果用户在ListBox中选择了一种颜色,那么该颜色的名称就会出现在TextBlock中,并且TextBlock的背景色会变为选定的颜色(请参见图2)。

图2 将一个源绑定到两个目标 

请注意前一个示例中将Mode属性设为OneWay的语句。

Mode属性用于定义绑定模式,它将决定数据如何在源和目标之间流动。

除OneWay之外,还有另外三种绑定模式:

OneTime、OneWayToSource和TwoWay。

正如前面的代码段中所示,使用OneWay绑定时,每当源发生变化,数据就会从源流向目标。

尽管我在示例中显式指定了此绑定模式,但其实OneWay绑定是TextBlock的Text属性的默认绑定模式,无需对其指定。

和OneWay绑定一样,OneTime绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或DataContext发生更改时才会如此操作,因此,它不会侦听源中的更改通知。

与OneWay和OneTime绑定不同,OneWayToSource绑定会将数据从目标发送到源。

最后,TwoWay绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。

在上述示例中,我使用了OneWay绑定,因为我希望只要ListBox选择发生变化,就将源(选定的ListBoxItem)发送到TextBlock。

我不希望TextBlock的更改再回到ListBox。

当然,用户无法编辑TextBlock。

如果我想使用TwoWay绑定,可以将TextBox添加到此代码中,将其文本和背景色绑定到ListBox,并将Mode属性设为TwoWay。

用户在ListBox中选择一种颜色后,该颜色就会显示在TextBox中,并且其背景色会相应变化。

如果该用户在TextBox中键入了一种颜色(例如蓝绿色),ListBox中的颜色名称就会更新(从目标到源),反过来,因为ListBox已经更新,所以此新值就会被发送到绑定到ListBox的SelectedItem属性的所有元素。

这意味着TextBlock也会更新其颜色,并且将其文本值设置为该新的颜色(请参见图3)。

图3 运行中的TwoWay绑定 

下面是我刚才用来将TextBlock(OneWay)和TextBox(TwoWay)绑定到ListBox的代码:

复制代码

Text="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=OneWay}"x:

Name="tbSelectedColor"

Background="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=OneWay}"/>

Text="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=TwoWay}"x:

Name="txtSelectedColor"

Background="{BindingElementName=lbColor,Path=SelectedItem.Content,

Mode=OneWay}"/>

如果我将TwoWay模式改回到OneWay,用户则可以编辑TextBox中的颜色,且不会导致更改过的值被发回给ListBox。

选择合适的绑定模式非常重要。

当我想向用户显示只读数据时,我通常会采用OneWay模式。

当我希望用户可以更改控件中的数据,并且让该变化能在数据源(DataSet、对象、XML或其他绑定控件)中体现出来时,我会使用TwoWay绑定。

如果想让用户在数据源不将其数据绑定到目标的情况下更改数据源,我发现OneWayToSource是个不错的选择。

我曾经接到一个任务,要求在只读控件中显示与加载屏幕时一样的数据状态。

在这个任务中,我使用了OneTime绑定。

通过使用OneTime绑定,一系列只读控件均被绑定到了数据,并且当用户与表单交互且数据源的值发生更改时,绑定控件仍保持不变。

这为用户提供了一种比较所发生更改的方法。

此外,当源没有实现INotifyPropertyChanged时,OneTime绑定也是一个不错的选择。

绑定的时间

在上述示例中,TextBox允许TwoWay绑定到在ListBox中选定的ListBoxItem。

这会使数据在TextBox失去焦点时从TextBox流回ListBox。

为了改变导致将数据发送回源的这种情况,可以为UpdateSourceTrigger指定值,它是用于定义何时更新源的绑定属性。

可以为UpdateSourceTrigger设置三个值:

Explicit、LostFocus和PropertyChanged。

如果将UpdateSourceTrigger设置为Explicit,则不会更新源,除非从代码调用BindingExpression.UpdateSource方法。

LostFocus设置(TextBox控件的默认值)指示源在目标控件失去焦点时才会更新。

PropertyChanged值指示目标会在目标控件的绑定属性每次发生更改时更新源。

如果您想指示绑定的时间,该设置非常有用。

绑定到XML

绑定到数据源(例如XML)和对象同样也非常方便。

图4显示了XmlDataProvider的示例,其中包含将用作数据源的颜色的嵌入式列表。

XmlDataProvider可用来绑定到XML文档或片断,该文档或片段既可以嵌入在XmlDataProvider标记中,也可以位于外部位置引用的文件中。

 Figure 4 XmlDataProvider

复制代码

Key="MoreColors"XPath="/colors">

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1