WPF入门3:绑定

这篇具有很好参考价值的文章主要介绍了WPF入门3:绑定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WPF入门3:绑定

学习如何从一个元素提取信息,并在另一个元素上显示信息, 而不用编写一行代码.

什么是绑定 (Binding)?

         绑定顾名思义,是将我们获取到的数据和UI上的控件绑定起来利用数据的变化来更新界面所看到的内容。

那如何实现绑定呢?

把绑定分为五步(这个是面试中经常遇到的考点以下内容可以记在小本本上):
1.绑定目标 2.绑定属性 3.绑定模式 4.绑定数据源 5.关联资源

1.绑定目标

绑定目标很好理解,其实就是你要操作绑定的控件。例如:Button,TextBox。

WPF入门3:绑定
2.绑定属性(依赖项属性)

<TextBox Width="200" Height="25" Text="{Bingding Name}"></TextBox>
  • 绑定语法介绍

如上代码块中,Text就是绑定属性了, Bingding 是绑定关键字,而后面的Name就是你要绑定的数据源的变量名。

绑定:描述的是一种关系,同构某种关系将多个事物联系在一起。 ​
页面对象的属性(必须是依赖属性):目标 Target ​
需要显示在界面上做交互关联的数据对象 :源 Source

  • 绑定表达式
Text="{Binding Source=data,Path=value}" 

:将页面对象的某个属性与数据源建立联系。
​ 通过绑定可以将界面与数据逻辑进行隔离。

<Window x:Class="WpfApp2.BindingDemo.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2.BindingDemo"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800">
    <Grid>
        <TextBlock Text="{Binding Source=data,Path=value}"></TextBlock>
    </Grid>
</Window>
  //备注:
  //Text:目标
  //Source=data,Path=value   源:  也是绑定表达式
            

3.绑定模式

TwoWay 无论是目标属性还是源属性,只要发生了更改,TwoWay 就会更新目标属性或源属性。

OneWay 仅当源属性发生更改时更新目标属性。

OneTime 仅当应用程序启动时或 DataContext 进行更改时更新目标属性。

OneWayToSource 在目标属性更改时更新源属性。

Default:模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.

WPF入门3:绑定
4.绑定数据源
一般来说可以是单个变量(int , double,string)、也可以是一个数据集(List)。根据需求和场景去定义。

  • 指定方式

Source、ElementName、DataContext、RelativeSource、Path、XPath

  • ​ 数据源类型

​ 1)依赖对象作为数据源

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Name="window">
    <Grid>
        <StackPanel>
          <!--依赖对象绑定-->
        <TextBox Name="txt" Text="123"></TextBox>
            <TextBlock Text="{Binding ElementName= txt,Path=Text}"></TextBlock>
            <TextBlock Text="{Binding ElementName= window,Path=Title}"></TextBlock>


            <TextBlock  Text="Solider当前值:"></TextBlock>
            <TextBlock  Text="{Binding  ElementName=slider,Path= Value}"></TextBlock>
            <Slider Width="200" Name="slider"  Minimum="5" Maximum="100" HorizontalAlignment="Left"></Slider>
            <TextBlock Text="Solider最小值:"></TextBlock>
            <TextBlock Text="{Binding ElementName=slider,Path=Minimum}"></TextBlock>
        </StackPanel> 
    </Grid>
</Window>


2) 普通数据类型或集合类型作为数据源

<Window.Resources>
        <sys:String x:Key="name">小明</sys:String>
        <x:Array x:Key="data" Type="sys:String">
            <sys:String>小刚</sys:String>
        </x:Array>
    </Window.Resources>
    
     <!--普通对象,集合对象绑定   开始-->
            <TextBlock Text="{Binding Source={StaticResource name}}"></TextBlock>
            <TextBlock Text="{Binding Source={StaticResource data},Path=[0]}"></TextBlock>
            <!--普通对象,集合对象绑定   结束-->

3) 单个对象作为数据源,INotifyPropertyChanged

新建类:DataClass 继承 INotifyPropertyChanged文章来源地址https://www.toymoban.com/news/detail-439651.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp2
{
    public class DataClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;
        private string  _Value;
        public string Value
        {
            get { return _Value; }
            set
            {
                _Value = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));
            }

        }

    }
}

<Window.Resources> 
        <local:DataClass Value="这是单个对象作为数据源,INotifyPropertyChanged  " x:Key="dataclass"></local:DataClass>
    </Window.Resources> 
<Window>
<!--单个对象作为数据源,INotifyPropertyChanged  开始-->
<TextBlock Text="{Binding Source={StaticResource dataclass},Path=Value}"></TextBlock>
<!--单个对象作为数据源,INotifyPropertyChanged  结束-->      
</Window>

  1. 关联资源 DataContext
    在每一个窗体中,都有一个DataContext ,它是一个object类型主要用来存储绑定资源。

绑定和窗体xaml.cs操作的区别在哪里?

     区别在于,窗体后台文件直接访问控件的操作是事件驱动。比如说我上一个视频讲到的button的click事件,
     如果没有事件的存在是改变不了界面的。
     绑定操作,是以数据本身的变化来通知界面显示改变的。
     UI代码和逻辑代码实现前后端分离。

到了这里,关于WPF入门3:绑定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF 入门笔记 - 04 - 数据绑定 - 补充内容:资源基础

    宇宙很大,生活更大,也许以后还有缘相见。 --三体 🌌 💭 该篇作为[WPF 入门笔记 - 04 - 数据绑定] - Additional Content 章节的补充内容 XAML 资源概述 (WPF .NET) WPF中的每一个元素都有一个 Resources 属性,该属性存储了一个资源字典集合。一般来说,可以把WPF的资源按照不同的性质分

    2024年02月11日
    浏览(41)
  • WPF 零基础入门笔记(3):数据绑定详解(更新中)

    WPF基础知识博客专栏 WPF微软文档 WPF控件文档 B站对应WPF数据绑定视频教程 我们在之前的文章中,详细解释了数据模版和控件模板。简单来说数据模板和控件模板就是为了解决代码重复的问题。我们可以回顾一下之前的所有内容。 为了不写重复的样式,WPF提供了样式设置 为了

    2024年02月11日
    浏览(37)
  • WPF 如何实现事件绑定 (MVVM)

    首先说到绑定,一般是在WPF 中常见的,因为WPF中有一个比较好用的框架叫做 MVVM 所以View层的按钮等元件的的动作都是需要和后台ViewModel 中的函数进行绑定的。 如 我们最常见的按钮的command 绑定 这里面的command 是命令,不是事件 如果点击图片,或者按钮抬起来的时候需要触

    2024年02月04日
    浏览(55)
  • 如何让WPF中的ValidationRule实现参数绑定

    应用开发过程中,常常会对用户输入内容进行验证,通常是基于类型、范围、格式或者特定的要求进行验证,以确保输入符合预期。例如邮箱输入框校验输入内容是否符合邮箱格式。在WPF中,数据模型允许将 ValidationRules 与 Binding 对象关联,可以通过继承 ValidationRule 类并重写

    2024年02月12日
    浏览(42)
  • WPF实战学习笔记29-登录数据绑定,编写登录服务

    添加登录绑定字段、命令、方法 修改对象:Mytodo.ViewModels.ViewModels 添加密码依赖对象行为 添加文件:Mytodo.Extensions.PassWordExtensions ### 登录UI添加密码行为 修改文件:Mytodo.Views.LoginView.xmal 添加命名空间,略 修改passbox。 添加加密方法,并使用 添加文件:MyToDo.Share.StringE

    2024年02月15日
    浏览(37)
  • chrome浏览器技巧,如何查看web页面上元素绑定的监听事件

    第一步:首先通过 F12 进入开发者工具页面。 第二步:选中 Elements 页签内对应的元素,可以用一个按钮来试一试。 第三步:右边选择 Event Listeners 页签,并取消勾选 Ancestors All。这个包含该元素所有父类绑定的监听事件。 如下图所示:图中的提示框的确定按钮就绑定了一个

    2024年02月13日
    浏览(52)
  • vue如何获取一个元素的高度

    Vue 中获取一个元素的高度可以使用 JavaScript 原生方法或者 Vue 内置的 $refs。 使用 JavaScript 原生方法: 可以在 mounted 钩子函数中获取到元素,然后使用 offsetHeight 属性获取元素高度。

    2024年02月12日
    浏览(43)
  • C# WPF 数据绑定

    后台变量发生改变,前端对应的相关属性值也发生改变 接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。 官方示例代码如下 示例演示 before after 本示例提供了多种绑定方式,使用接口进行绑定,不使用接口进行绑定 1.在MainWindow中进行属性更改 2.在

    2024年02月02日
    浏览(44)
  • WPF——事件绑定命令

    我们都知道WPF中的命令在结合MVVM模式的框架使用之后(框架重新实现了ICommand),可以解耦。但并不是所有控件都可以绑定命令的,比如TextBox、ComboBox等。在使用这类控件时,如果你想让它的某个事件激发时调用ViewModel中的方法,往往需要把ViewModel中的方法暴露给View,然后在

    2024年02月05日
    浏览(86)
  • wpf RelativeSource绑定

    Self FindAncestor TemplatedParent PreviousData   Self用于绑定源和绑定目标相同的场景中。对象的一个属性与同一对象的另一个属性绑定。 例如,让我们取一个高度和宽度相同的椭圆。在XAML文件中添加下面给出的代码。宽度属性与高度属性相对绑定。   FindAncestor 顾名思义,当绑定源是

    2023年04月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包