目录

1、View模型代码

2、ViewModel模型代码

3、数据模型

4、样例演示

5、一些知识点


这里简单实现一个listbox绑定的功能,符合MVVM模型。

View模型代码(View视图以及窗体类的后台代码)


<Grid>
<ListBox Name="ListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name, Mode=TwoWay}" />
<TextBox Text="{Binding Path=Password}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ViewModel model=new ViewModel(this);
this.ListBox.ItemsSource = model.users; Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
model.users[0].Name = i.ToString();
Console.WriteLine(i);
Thread.Sleep(1000);
} }); }
}

ViewModel模型代码


 /// <summary>
/// 视图模型
/// </summary>
public class ViewModel
{
public List<User> users { get; set; } public ViewModel(MainWindow window)
{
users = new List<User>();
for (int i = 0; i < 5; i++)
{
var user = new User()
{
Name = "testname",
Password = "123456"
};
users.Add(user);
}
}
}

数据模型


  /// <summary>
/// 数据模型
/// </summary>
public class User:INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{ _name = value;
//这里通知说明数据发生改变了,调用OnPropertyChanged方法
OnPropertyChanged(nameof(Name));
}
}
private string _password;
public string Password
{
get => _password;
set
{
_password = value;
OnPropertyChanged(nameof(Password));
}
} public event PropertyChangedEventHandler PropertyChanged; /// <summary>
/// 这里事件派发
/// </summary>
/// <param name="propertyName"></param>
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

样例演示


一些知识点

 Text="{Binding Path=Name, Mode=TwoWay}" 

可以直接写成:

 Text="{Binding Name}" 

因为默认就是双向绑定,也可以不加Path,效果一样。

关于数据绑定这一块的详细说明和底层实现可以看这几个博客,我这里就不照抄了:

第一个:WPF学习之数据绑定

第二个:WPF入门教程系列十五——WPF中的数据绑定(一)

[WPF]数据绑定Demo的更多相关文章

  1. 微软原文翻译:适用于.Net Core的WPF数据绑定概述

    原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...

  2. WPF 数据绑定Binding

    什么是数据绑定? Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 通过数据绑定,您可以对两个不同对象 ...

  3. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  4. WPF——数据绑定(一)什么是数据绑定

    注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...

  5. 剖析WPF数据绑定机制

    引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...

  6. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

  7. 定时任务 Wpf.Quartz.Demo.4

    本文继续介绍定时任务 Wpf.Quartz.Demo.3的一些小细节, 代码也请前往第3节下载. 1.RichTextBox右键菜单 <RichTextBox.ContextMenu>   ...

  8. 定时任务 Wpf.Quartz.Demo.2

    定时任务 Wpf.Quartz.Demo.1已经能运行了,本节开始用wpf搭界面. 准备工作: 1.界面选择MahApp.Metro 在App.xaml添加资源 <Application.Res ...

  9. C#-WPF数据绑定基础(一)

    前言:WPF数据绑定技术有效的提高了程序的容错率,可以最大程度的保持程序的健壮性,从而降低程序在使用过程中崩掉的可能性. 接下来,我将分享一下我在写测量程序过程中所用到的数据绑定方面的知识 首先,我所 ...

  10. C#WPF数据绑定模板化操作四步走

    前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...

随机推荐

  1. JS---HelloWorld

    1.功能效果图 2.代码实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  2. NOIP2017总结 & 题解

    day1t1的结论貌似在哪见过,自己稍微验证了一下貌似没记错就没有管了.t2一道很好(keng)的模拟题啊t3自己做题好慢啊,想出来dp打上去最后几分钟才过了大样例,我写的是记忆化搜索,判-1很好判, ...

  3. 齐博x1万能数据统计之fun函数

    使用 fun("count@info",'数据表名','用户uid') 可以统计指定任何数据表的记录条数 fun("count@info",'cms_conte ...

  4. 25.自定义mixin和基类

    很多时候业务需求并不是几个简单的mixin就可以满足,需要我们自定义mixin # get_object源码中字段查询源代码 filter_kwargs = {self.lookup_field: s ...

  5. 6.Git忽略文件

    忽略指定文件 有些文件与实际功能无关,不参与服务器上部署运行,把他们忽略调能够屏蔽ide工具之间的差异 1.在工作区目录下创建xxx.gitignore文件 (前缀名随意) 以斜杠"/&qu ...

  6. Linxu常用命令

    一.Linux权限的概念 Linux下有两种用户:普通用户和超级用户: 普通用户:在linux下做有限的事情: 超级用户:可以在linux系统下做任何事情,不受限制. 普通用户的提示符是"$ ...

  7. 2流高手速成记(之七):基于Dubbo&Nacos的微服务简要实现

    本节内容会用到之前给大家讲过的这两篇: 2流高手速成记(之六):从SpringBoot到SpringCloudAlibaba 2流高手速成记(之三):SpringBoot整合mybatis/mybat ...

  8. NC 使用Nginx实现https的反向代理

    summary: [通过Nginx实现NCC的https访问,并解决UClient应用的问题] 1 概述 通过Nginx 安装配置反向代理,实现NC.NCC的https访问. 本文以NCC2005为例 ...

  9. 【ASP.NET Core】MVC控制器的各种自定义:应用程序约定的接口与模型

    从本篇起,老周会连发N篇水文,总结一下在 MVC 项目中控制器的各种自定义配置. 本文内容相对轻松,重点讨论一下 MVC 项目中的各种约定接口.毕竟你要对控制器做各种自定义时,多数情况会涉及到约定接口 ...

  10. Eclipse Python IDE安装

    时隔一年,曾经的AI工程师微专业课程也忘了大半,如今终于有闲心重温人工智能的相关知识与项目.先从Eclipse安装开始. 首先下载JDK,进入JDK官网下载最新版本的JDK并安装:https://ww ...