C# WPF入门学习主线篇(二十七)—— 数据源

news2024/12/24 21:45:15

C# WPF入门学习主线篇(二十七)—— 数据源

在这里插入图片描述

在WPF开发中,数据绑定是一个强大的功能,它允许UI元素和数据源之间进行双向通信。理解和使用数据源对于创建高效和动态的应用程序至关重要。在本文中,我们将详细介绍WPF中的数据源,包括如何使用集合(如ObservableCollection)、绑定到对象和集合等内容。

一、数据源概述

数据源是WPF数据绑定的基础。数据源可以是各种类型的数据结构,包括单个对象、集合对象、XML数据、数据库结果集等。在WPF中,我们主要使用以下几种类型的数据源:

  1. 单个对象:简单的对象数据绑定。
  2. 集合对象:如ObservableCollection,用于动态数据集合。
  3. XML数据:绑定到XML数据源。
  4. 数据库结果集:通过数据访问技术绑定到数据库结果。

二、使用ObservableCollection

ObservableCollection 是一个常用的集合类型,特别适合用于WPF的数据绑定,因为它实现了INotifyCollectionChanged接口,当集合中的项发生变化时,它会自动通知UI更新。

1. 定义ObservableCollection

首先,我们需要定义一个ObservableCollection,并将其绑定到UI控件,如ListBox或ComboBox。

后台代码
using System.Collections.ObjectModel;
using System.Windows;

namespace WpfApp
{
    public partial class MainWindow : Window
    {
        public ObservableCollection<Person> People { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            People = new ObservableCollection<Person>
            {
                new Person { Name = "John Doe", Age = 30 },
                new Person { Name = "Jane Smith", Age = 25 },
                new Person { Name = "Sam Brown", Age = 20 }
            };
            this.DataContext = this;
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}
XAML代码
<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ObservableCollection Demo" Height="300" Width="400">
    <Grid>
        <ListBox ItemsSource="{Binding People}" DisplayMemberPath="Name" />
    </Grid>
</Window>

在上述代码中,我们创建了一个ObservableCollection,并将其绑定到ListBox控件。DisplayMemberPath属性用于指定在ListBox中显示的属性。

2. 动态更新集合

ObservableCollection不仅支持初始绑定,还支持动态更新。我们可以在后台代码中添加或删除集合中的项,UI将自动更新。

添加新项
People.Add(new Person { Name = "Michael Green", Age = 35 });
删除项
People.Remove(People.First());

三、绑定到对象和集合

除了ObservableCollection,我们还可以将数据源绑定到单个对象或其他集合类型,如List或Array。

1. 绑定到单个对象

我们可以将DataContext设置为单个对象,并在UI中绑定其属性。

后台代码
public partial class MainWindow : Window
{
    public Person SinglePerson { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        SinglePerson = new Person { Name = "Alice Blue", Age = 28 };
        this.DataContext = SinglePerson;
    }
}
XAML代码
<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Single Object Binding" Height="200" Width="300">
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/>
            <TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/>
        </StackPanel>
    </Grid>
</Window>

2. 绑定到其他集合类型

除了ObservableCollection,我们还可以将数据绑定到List或Array等集合类型。

后台代码
public partial class MainWindow : Window
{
    public List<Person> PeopleList { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        PeopleList = new List<Person>
        {
            new Person { Name = "Tom White", Age = 40 },
            new Person { Name = "Linda Black", Age = 32 }
        };
        this.DataContext = this;
    }
}
XAML代码
<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="List Binding" Height="300" Width="400">
    <Grid>
        <ListBox ItemsSource="{Binding PeopleList}" DisplayMemberPath="Name" />
    </Grid>
</Window>

总结

在本篇文章中,我们介绍了WPF中的数据源概念,包括如何使用ObservableCollection以及绑定到单个对象和集合类型。理解和使用这些数据源可以帮助你创建更动态和交互性更强的WPF应用程序。在后续的文章中,我们将深入探讨数据绑定的高级技术和实践。

通过这些示例和解释,你应该能够掌握在WPF中使用数据源的基本方法,并在实际项目中应用这些知识。如果你有任何问题或建议,请随时留言与我们交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

servlet梦想酒店管理系统

梦想酒店管理系统 酒店管理系统分为管理端&#xff0c;和用户端&#xff0c; 用户端可以查看酒店客房&#xff0c;预定酒店系统&#xff0c;查询预定信息。 管理端&#xff1a;用户管理&#xff0c;类型&#xff0c;房间管理&#xff0c;业务管理&#xff0c;统计分析。 技术&…

使用Python保护或加密Excel文件的7种方法

目录 安装Python Excel库 Python 使用文档打开密码保护 Excel 文件 Python 使用文档修改密码保护 Excel 文件 Python 将 Excel 文件标记为最终版本 Python 保护 Excel 工作表 Python 在保护 Excel 工作表的同时允许编辑某些单元格 Python 锁定 Excel 工作表中的特定单元…

Elasticsearch:智能 RAG,获取周围分块

作者&#xff1a;来自 Elastic Sunile Manjee 在检索增强生成 (RAG) 领域&#xff0c;一个持续存在的挑战是找到输入大型语言模型 (LLM) 的最佳数据量。数据太少会导致响应不足或不准确&#xff0c;而数据太多会导致答案模糊。这种微妙的平衡启发我开发了一个专注于智能分块和利…

ssm的疫情物资管理系统

ssm的疫情物资管理系统 功能&#xff1a;前端页面展示 用户端&#xff1a;主页展示&#xff0c;新闻展示&#xff0c;疫情物资&#xff0c;在线留言&#xff0c;全国疫情&#xff0c;健康打卡&#xff0c;注册&#xff0c;登录 后端管理&#xff1a;登录&#xff0c;账号管理…

2024怎么选择开放式耳机?五款高评分机型推荐!

还记得我最早接触到不入耳的耳机是在前几年&#xff0c;上课需要一副耳机&#xff0c;我又受不住长时间的戴耳机&#xff0c;那时候如利刃一款蛮贵的开放式耳机&#xff0c;时过境迁现在已随着人们的需求发展至到至今的真无线的开放式蓝牙耳机&#xff0c;我也在这几年之内入手…

Postman下发流表至Opendaylight

目录 任务目的 任务内容 实验原理 实验环境 实验过程 1、打开ODL控制器 2、网页端打开ODL控制页面 3、创建拓扑 4、Postman中查看交换机的信息 5、L2层流表下发 6、L3层流表下发 7、L4层流表下发 任务目的 1、掌握OpenFlow流表相关知识&#xff0c;理解SDN网络中L…

【AI绘画】Stable Diffusion 3开源

Open Release of Stable Diffusion 3 Medium 主要内容 Stable Diffusion 3是Stability AI目前为止最先进的文本转图像开放源代码算法。 这款模型的小巧设计使其完美适合用于消费级PC和笔记本电脑&#xff0c;以及企业级图形处理单元上运行。它已经满足了标准化的文字转图像模…

红黑树(C++)

文章目录 写在前面1. 红黑树的概念及性质1. 1 红黑树的概念1. 2 红黑树的性质 2. 红黑树节点的定义3. 红黑树的插入3.1 按照二叉搜索的树规则插入新节点3.2 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏 4.红黑树的删除5.红黑树的验证6.源码 写在前面 在上篇文章中&…

移动UI:登录页如此哇塞,不发出就有点锦衣夜行啦。

移动UI登录页是移动应用中非常重要的一环。一个出色的登录页可以给用户留下深刻的印象&#xff0c;提供良好的用户体验&#xff0c;并确保用户的账号安全 在设计登录页时&#xff0c;可以考虑以下几个方面&#xff1a; 简洁明了的界面&#xff1a;登录页应该简洁明了&#xf…

关于一元方程求根中牛顿迭代法的分析

文末含有程序源代码以及可执行exe文件&#xff0c;文中部分内容参考网上博客以及GPT协助&#xff0c;希望能对你有所帮助~ 一、理论知识简述 牛顿迭代法&#xff08;Newton’s Method&#xff09;&#xff0c;也称为牛顿-拉弗森方法&#xff08;Newton-Raphson Method&#xf…

罗森伯格1800M 2000M 2400M 900M无源互调分析仪

在无线通信领域&#xff0c;频段是宝贵的资源&#xff0c;不同的通信系统通常会采用不同的频段以满足其传输需求。随着技术的发展&#xff0c;越来越多的通信系统被部署在各种频段上。为了准确、高效地测试和调试这些 信系统&#xff0c;各种测试设备也应运而生。源互调分析仪便…

rizhuti1.9-最新版-推荐文章缩略图

下载地址&#xff1a;rizhuti1.9-最新版-推荐文章缩略图 商城功能后台可以一键开启关闭&#xff0c;关闭后就是一个布局灵活&#xff0c;界面优美&#xff0c;速度超快的wordpress博客主题

2024新版AI创作系统pro搭建,支持文生漫画视频ai对话问答/ai音乐创作/ai测评/ai换脸/ai写真

一、系统介绍 一款结合了多种功能应用&#xff0c;是当前市场最热门的AI工具综合体 AI动漫生成 AI音乐创作 AI写真 AI换脸 AI绘画 AI趣测 六大AI功能 AI创作小程序是一种利用人工智能技术为用户提供服务&#xff0c;并通过某种方式实现的小程序。这种小程序可以应用于多…

微服务 | Springboot整合Dubbo+Nacos实现RPC调用

官网&#xff1a;Apache Dubbo 随着互联网技术的飞速发展&#xff0c;越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务&#xff0c;每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率&…

RK3568技术笔记 Ubuntu 安装VMware Tools

安装 VMware Tools 后可以直接使用复制粘贴功能拷贝 Ubuntu 系统和 windows 主机内的文件&#xff0c;非常方便。 开启虚拟机&#xff0c;必须要进入ubuntu系统后才能进行下面的步骤。 单击 VMware 软件中的标签“虚拟机”&#xff0c;在下拉的菜单中单击“安装VMware Tools &…

x64-linux下在vscode使用vcpkg

1.使用vscode远程连接上对应的linux &#xff0c;或者直接在图形化界面上使用。 2.安装vcpkg 插件&#xff0c;然后打开插件设置。 注意&#xff1a;defalut和host的主机一定和你自己的主机一致&#xff0c;且必须符合vcpkg三元组格式&#xff0c;其中你可以选择工作台的设置&a…

R语言ggHoriPlot包绘制地平线图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 关键词“地平线图” 1. 数据读取与处理 首先&#xff0c;从TSV文件中读取数据&#xff0c;并进行数据清洗和处理。 rm(listls()) pacman::p_load(tidyverse,ggalt,ggHoriPlot,hrbrthemes…

ACM MM2024 Rebuttal Latex模板如何去掉标题

声明 Latex初学者&#xff0c;非官方指定做法&#xff0c;仅供大家参考 问题 ACM MM 2024会议&#xff0c;官方给定的Rebuttal latex模板&#xff0c;title占据了两行&#xff0c;但又限制Rebuttal只能有一页&#xff0c;所以在微信群里&#xff0c;大家希望能将这个title删…

springboot 整合redis问题,缓存击穿,穿透,雪崩,分布式锁

boot整合redis 压力测试出现失败 解决方案 排除lettuce 使用jedis <!-- 引入redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclus…

快来!AI绘画Stable Diffusion 3终于开源了,更强的文字渲染和理解力,12G显卡可跑!

大家好&#xff0c;我是设计师阿威 Stable Diffusion 3终于开源了&#xff0c;2B参数的Stable Diffusion 3 Medium模型已经可以在HuggingFace上下载了&#xff01;如无法科学上网的小伙伴我也准备好了网盘资料&#xff0c;请看文末扫描获取哦&#xff01; Stable Diffusion 3 …