【概要】

上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定。

如有学习过程中想交流学习、疑惑解答可以来此QQ群交流:580749909。(所有涉及到的源码都上传到了群文件里)

希望加群的人提问时尽量想清楚自己的问题,愿意钻研而不是等现成的答案而不去思考。祝各位同仁早日学会WPF这项技术。

【绑定】

如上图所示按照个人理解我总结了一下,把绑定分为四步:

1.绑定目标

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

<TextBox Width="200" Height="25"></TextBox>

2.绑定属性

如图所示,在操作TextBox的时候绑定需要指定你要绑定的属性比如:

 <TextBox Width="200" Height="25" Text="{Bingding Name}"></TextBox>

绑定语法介绍:

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

3.绑定模式

绑定模式一共分为5种,TwoWay,OneWayToSource,OneWay,OneTime,Default。如果不写则默认是TwoWay。

接下来分别介绍:

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

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

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

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

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

4.绑定数据源

数据源很容易和数据通知联系在一起所以在这里一起讲了。这里要讲的不仅仅是这么简单,我主要分为两块来讲先来看代码。

后台代码:

    public class MainViewModel : INotifyPropertyChanged
{
ObservableCollection<MainModel> collection = new ObservableCollection<MainModel>(); private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
} public MainViewModel() {
Name = "";
} public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
    public class MainModel
{
public int Age { get; set; } public string Name { get; set; }
}

前台代码:

<Window x:Class="TestDemo.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:TestDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBox Width="200" Height="25" Text="{Binding Name,Mode=TwoWay}"></TextBox>
</Grid>
</Window>
    public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}

第一块:属性

其实数据绑定中的数据源,并没有特别的要求只要是属性实现了INotifyPropertyChanged的属性通知基本上都能实现。

第二块:集合

集合这一块就稍微特殊一点,为什么这么说呢。因为wpf中有提供一个叫ObservableCollection,这个集合使用起来和List一样,但内部实现了数据通知的机制所以开发者就不用实现一堆东西了。

而普通集合想要实现这种效果就需要实现数据通知的接口,但是这里平不仅仅实现INotifyPropertyChanged,让我们看看微软官方它是如何定义的。

我们在图中看到了INotifyCollectionChanged、INotifyPropertyChanged接口。我分别来讲述一下它们的作用:

1)INotifyCollectionChanged它的作用是通知集合的更改比如说这个集合中添加了某一个元素。

2)INotifyPropertyChanged的作用则是精确通知到这个集合中元素的属性更改。

比如自定义了一个数据类型放入了

List<MainModel> collection = new List<MainModel>();其中能达到数据通知的MainModel中定义的Age属性更改通知。

WPF新手快速入门系列 2.绑定的更多相关文章

  1. WPF新手快速入门系列 1.布局

    [概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...

  2. WPF新手快速入门系列 3.MVVM

    [概要] 这一章主要讲述,讲述MVVM模式和用法. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:580749909.(所有涉及到的源码都上传到了群文件里) 希望加群的人提问时尽量想清楚自己的 ...

  3. WPF快速入门系列(4)——深入解析WPF绑定

    一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...

  4. .Net5 WPF快速入门系列教程

    一.概要 在工作中大家会遇到需要学习新的技术或者临时被抽调到新的项目当中进行开发.通常这样的情况比较紧急没有那么多的时间去看书学习.所以这里向wpf技术栈的开发者分享一套wpf教程,基于.net5框架 ...

  5. WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  6. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

  7. WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...

  8. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  9. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

随机推荐

  1. CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性

    LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...

  2. 《分享》Koa2源码分析

    曾经在公司内部做的一起关于koa源码的分享,希望对你有帮助: koa2 源码分析整理 koa2(2.4.1版本)源码主要包含四个js,包括application.js, context.js, req ...

  3. springMVC 与 html RESTful 解决方案

    若前端为html 而非jsp  且 拦截如下 <servlet-mapping> <servlet-name>springMVC</servlet-name> &l ...

  4. 教你如何使用零代码开发的Foreach循环功能代替for循环

    使用技巧:Foreach循环功能! 项目中为了避免将同样的语句重复写很多次,相信大家在编程过程中肯定用过循环语句.其中For循环作为基础中的基础,大家一定不会陌生.不过今天小V要讲的可不是For循环, ...

  5. 基于 JavaEmail 简单的发送邮件点到点,一对多(图片和附件)之多收件人,多少送人

    if(!StringUtil.isEmpty(message_type_to)){ if (message_type_to.contains(",")) { String[] sp ...

  6. java数组输出的三种方式

    第一种:foreach语句遍历输出 //通过foreach语句遍历输出数组 int nums[] = new int [4]; for (int num:nums) { System.out.prin ...

  7. Docker 搭建 GitLab

    Docker 搭建 GitLab 步骤 # 创建目录 mkdir -p /usr/local/gitlab && cd /usr/local/gitlab # 创建映射目录 mkdir ...

  8. 使用webgl(three.js)创建科技版3D机房,3D机房微模块详细介绍(升级版三)—— 1

    上节课已经详细描述了微模块机房的实现过程,文章地址(https://www.cnblogs.com/yeyunfei/p/10484241.html) 紧接着上节课的内容 我们这节可来详细讲解科技版机 ...

  9. Git本地库既关联GitHub又关联Gitee

    创建代码仓库 使用gitee举例(github和gitee差不多) 1.在gitee右上角点击+,选择新建仓库

  10. Android学习进程 Java引用 Rxjava MVP

    第一份Android开发工作,以便于记录学习进程 Java引用 Java没有显式的使用指针,但对象的访问仍是通过指针实现的,所以直接对象之间的赋值会导致存储空间是数据的改变,如设置两个对象,其中对象一 ...