C# WPF 数据绑定

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

需求

后台变量发生改变,前端对应的相关属性值也发生改变

实现

接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。

示例

示例一

官方示例代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//将下面的命名空间更改为项目的名称
//或者在创建项目时使用以下名称命名项目。
namespace TestNotifyPropertyChangedCS
{
    //这个表单演示了如何使用BindingSource来绑定
    //一个列表到DataGridView控件。这个列表没有
    //引发更改通知。然而,DemoCustomer类型
    //在列表中。  
    public partial class Form1 : Form
    {
        //此按钮可更改列表元素的值。 
        private Button changeItemBtn = new Button();

        // 这个DataGridView控件显示列表的内容。
        private DataGridView customersDataGridView = new DataGridView();

        // 这个BindingSource将列表绑定到DataGridView控件。
        private BindingSource customersBindingSource = new BindingSource();

        public Form1()
        {
            InitializeComponent();

            // 设置“更改项目”按钮。
            this.changeItemBtn.Text = "Change Item";
            this.changeItemBtn.Dock = DockStyle.Bottom;
            this.changeItemBtn.Click +=
                new EventHandler(changeItemBtn_Click);
            this.Controls.Add(this.changeItemBtn);

            //设置DataGridView。  
            customersDataGridView.Dock = DockStyle.Top;
            this.Controls.Add(customersDataGridView);

            this.Size = new Size(400, 200);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //创建并填充DemoCustomer对象列表
            //它将向DataGridView提供数据。 
            BindingList<DemoCustomer> customerList = new BindingList<DemoCustomer>();
            customerList.Add(DemoCustomer.CreateNewCustomer());
            customerList.Add(DemoCustomer.CreateNewCustomer());
            customerList.Add(DemoCustomer.CreateNewCustomer());

            // 将列表绑定到BindingSource。  
            this.customersBindingSource.DataSource = customerList;

            // 将BindingSource附加到DataGridView。
            this.customersDataGridView.DataSource =
                this.customersBindingSource;

        }

        //修改CompanyName属性的值
        //当点击“更改项目”按钮时,列表中的项目。  
        void changeItemBtn_Click(object sender, EventArgs e)
        {
            //从BindingSource获取对列表的引用。 
            BindingList<DemoCustomer> customerList =
                this.customersBindingSource.DataSource as BindingList<DemoCustomer>;

            //修改CompanyName属性的值
            //列表中的第一项。  
            customerList[0].CustomerName = "Tailspin Toys";
            customerList[0].PhoneNumber = "(708)555-0150";
        }

    }

    //这是一个简单的客户类
    //实现IPropertyChange接口。
    public class DemoCustomer : INotifyPropertyChanged
    {
        //这些字段保存公共属性的值。  
        //Guid.NewGuid();随机生成唯一标识符,一般在项目中用来生成数据库的主键Id。
        private Guid idValue = Guid.NewGuid();
        private string customerNameValue = String.Empty;
        private string phoneNumberValue = String.Empty;

        public event PropertyChangedEventHandler PropertyChanged;

        //该方法由每个属性的Set访问器调用。
        //应用于可选propertyName的CallerMemberName属性
        //参数导致调用方的属性名被替换为参数。
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        //构造函数是私有的,用来强制工厂模式。  
        private DemoCustomer()
        {
            customerNameValue = "Customer";
            phoneNumberValue = "(312)555-0100";
        }

        //这是一个公共工厂方法。
        public static DemoCustomer CreateNewCustomer()
        {
            return new DemoCustomer();
        }

        //该属性表示一个ID,合适
        //用作数据库中的主键。  
        public Guid ID
        {
            get
            {
                return this.idValue;
            }
        }

        public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }

        public string PhoneNumber
        {
            get
            {
                return this.phoneNumberValue;
            }

            set
            {
                if (value != this.phoneNumberValue)
                {
                    this.phoneNumberValue = value;
                    NotifyPropertyChanged();
                }
            }
        }
    }
}

示例演示

before

C# WPF 数据绑定,C#,c#,wpf,开发语言

after

C# WPF 数据绑定,C#,c#,wpf,开发语言

示例二

本示例提供了多种绑定方式,使用接口进行绑定,不使用接口进行绑定

1.在MainWindow中进行属性更改

2.在MainWindow中建立一个新的usercontrol查看是否可以进行相同的属性更改

3.原始示例中展示了Text的文字内容更改,尝试对DataTrigger的Binding使用同样的方法查看是否可以更改文章来源地址https://www.toymoban.com/news/detail-780792.html

后端代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public MainWindow()
        {
            this.DataContext = thi

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

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

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

相关文章

  • WPF 入门笔记 - 04 - 数据绑定

    慢慢来,谁还没有一个努力的过程。 --网易云音乐 数据绑定概述 (WPF .NET) 什么是数据绑定? 数据绑定(Data Binding)是 WPF 一种强大的机制,用于在应用程序的各个部分之间建立数据的双向关联。它允许你将数据从一个源(例如对象、集合、数据库等)绑定到目标控件的属性,

    2024年02月09日
    浏览(54)
  • WPF 数据绑定类属性 和数据更新

    WPF中数据绑定是一个非常强大的功能,不仅可以绑定后台数据,还可以进行实时更新。 在后台创建模型类,然后在标签页面进行导入并绑定。 // 实现数据更新需要再模型类里面添加INotifyPropertyChanged接口 // INotifyPropertyChanged 检查属性是否发生变化的接口 此方法在模型类数据变

    2024年04月15日
    浏览(35)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件

    在我们开发的前端项目中,往往为了方便,都需对一些控件进行自定义的处理,以便实现快速的数据绑定以及便捷的使用,本篇随笔介绍通过抽取常见字典列表,实现通用的字典类型绑定;以及通过自定义控件的属性处理,实现系统字典内容的快捷绑定的操作。 在我们创建下

    2024年02月08日
    浏览(51)
  • 记一次WPF的DataGrid绑定数据

    之前一直在用winform,但是感觉界面不好看,然后就自己在网上学习WPF。一开始看到DataGrid的时候,还以为它是DataGridView,然后用winform的方法绑定数据发现不行,在不断的查找之后,终于学会了怎么简单的绑定数据。 工具:VStudio2022 框架:.net framework 4.8 新建一个 WPF 窗体,再

    2024年03月28日
    浏览(46)
  • C#创建DataTable并填充数据,按钮事件实现全选,并到全选的值。wpf开发

    wpf开发中,用事件创建一个datatable度填充到datagird里面,在datagrid里面有第一列是复选框。用一单击事件实现全选,用一个按钮事件得到所选中的值。 Window x:Class=\\\"WpfApp4.MainWindow\\\"         xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\"         xmlns:x=\\\"http://schemas.microsoft.com

    2024年02月08日
    浏览(31)
  • WPF 入门笔记 - 04 - 数据绑定 - 补充内容:资源基础

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

    2024年02月11日
    浏览(36)
  • WPF绑定(Binding)下的数据验证IDataErrorInfo

    WPF中Binding数据校验、并捕获异常信息的三种方式讲到了三种方式,其中使用ValidatinRule的方式比较推荐,但是如果一个类中有多个属性,要为每个属性都要声明一个ValidatinRule,这样做非常麻烦。可以让类继承自 IDataErrorInfo 来解决这个问题。 IDataErrorInfo基本使用 Data类中具有多

    2023年04月15日
    浏览(36)
  • WPF 零基础入门笔记(3):数据绑定详解(更新中)

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

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

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

    2024年02月15日
    浏览(32)
  • WPF 解决 Style.Trigger 中数据绑定失效的问题

    参考:stackoverflow 有如下代码,发现在 ImageSource=\\\"{Binding SomeImage}\\\" 中没有绑定的当前的 DataContext 改成如下即可

    2024年02月11日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包