WPF的数据绑定详细介绍

前端技术 2023/09/10 .NET

一、WPF数据绑定的概要

数据绑定:是应用程序 UI 与业务逻辑之间建立连接的过程。 如果绑定正确设置并且数据提供正确通知,则当数据的值发生更改时,绑定到数据的视觉元素会自动反映更改。 数据绑定可能还意味着如果视觉元素中数据的外部表现形式发生更改,则基础数据可以自动更新以反映更改。

例如:如果用户编辑 TextBox 元素中的值,则基础数据值会自动更新以反映该更改。

1. 数据绑定涉及到两个方面:

一个是绑定源,一个是绑定目标。绑定源即控件绑定所使用的源数据,绑定目标即数据显示的控件。

2. 对于绑定源,在WPF可以是以下四种:

•CLR对象:可以绑定到CLR类的公开的属性、子属性、索引器上。
•ADO.Net对象:例如DataTable、DataView等 。
•XML文件:使用XPath进行解析 。
•DependencyObject:绑定到其依赖项属性上,即控件绑定控件 。
对于绑定目标,必须是WPF中的DependencyObject,将数据绑定到其依赖项属性上。

二、      绑定的模式

1.  根据数据流的方向,WPF中的数据绑定分为以下四种:

OneWay 绑定:对源属性的更改会自动更新目标属性,但是对目标属性的更改不会传播回源属性。此绑定类型适用于绑定的控件为隐式只读控件的情况。

TwoWay 绑定:对源属性的更改会自动更新目标属性,而对目标属性的更改也会自动更新源属性。此绑定类型适用于可编辑窗体或其他完全交互式 UI 方案 。

OneWayToSource 与 OneWay 相反;它在目标属性更改时更新源属性。

OneTime绑定:该绑定会导致源属性初始化目标属性,但不传播后续更改。

注释:如果无需监视目标属性的更改,则使用 OneWay 绑定模式可避免 TwoWay 绑定模式的系统开销。

大多数属性都默认为 OneWay 绑定,但是一些依赖项属性,通常为用户可编辑的控件的属性,如 TextBox 的 Text 属性和 CheckBox 的 IsChecked 属性,默认为 TwoWay 绑定。

如果要知道依赖项属性绑定在默认情况下是单向还是双向的编程方法可使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。

示例代码:

复制代码 代码如下:

<Page x:Class=\"WpfDemo.Page1\"

    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"

    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"

    Title=\"Page1\" HorizontalAlignment=\"Center\">

        <Grid Name=\"GridTable\" Height=\"360\" Background=\"Silver\">

            <Grid.RowDefinitions>

                <RowDefinition></RowDefinition>

                <RowDefinition></RowDefinition>

                <RowDefinition></RowDefinition>

                <RowDefinition></RowDefinition>

            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>

            <ColumnDefinition Width=\"130\"></ColumnDefinition>

            <ColumnDefinition Width=\"150\"></ColumnDefinition>

            <ColumnDefinition Width=\"20\"></ColumnDefinition>

            </Grid.ColumnDefinitions>

        <Label Width=\"130\" Height=\"25\"  Grid.Row=\"0\" Grid.Column=\"0\"  Name=\"label1\">TwoWay</Label>

        <TextBox Width=\"150\" Height=\"25\"  Grid.Row=\"0\" Grid.Column=\"1\"  Name=\"textBox4\" Text=\"{Binding ElementName=scrollBar1,Path=Value,Mode=TwoWay}\" />

        <Label Width=\"130\" Height=\"25\"  Grid.Row=\"1\" Grid.Column=\"0\"  Name=\"label2\">OneWay</Label>

        <TextBox Width=\"150\" Height=\"25\"  Grid.Row=\"1\" Grid.Column=\"1\"   Name=\"textBox1\" Text=\"{Binding ElementName=scrollBar1, Path=Value,Mode=OneWay}\"/>

        <Label Width=\"130\" Height=\"25\"  Grid.Row=\"2\" Grid.Column=\"0\"  Name=\"label3\">OneWayToSource</Label>

        <TextBox Width=\"150\" Height=\"25\"  Grid.Row=\"2\" Grid.Column=\"1\"   Name=\"textBox2\" Text=\"{Binding ElementName=scrollBar1, Path=Value,Mode=OneWayToSource}\" />

        <Label Width=\"130\" Height=\"25\"  Grid.Row=\"3\" Grid.Column=\"0\"  Name=\"label4\">OneTime</Label>

        <TextBox Width=\"150\" Height=\"25\"  Grid.Row=\"3\" Grid.Column=\"1\"   Name=\"textBox3\" Text=\"{Binding ElementName=scrollBar1, Path=Value,Mode=OneTime}\"/>

         <ScrollBar Value=\"30\" Minimum=\"0\" Grid.RowSpan=\"4\" Grid.Row=\"0\" Grid.Column=\"2\" Maximum=\"100\" Name=\"scrollBar1\" Width=\"18\" Height=\"{Binding ElementName=GridTable,Path=Height}\" />

        </Grid>

</Page>

本文地址:https://www.stayed.cn/item/26503

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。