WPF 更改数据源时通知表格 更改List通知DataGrid

2023-11-16

用到集合ObservableCollection,此集合微软的解释为:动态收集数据并通知到显示的控件,无论数据是刷新、删除、增加、更新。

新建Model,注意看里面的大小写。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace WPFTest
{
    //绑定的类必须要继承自INotifyPropertyChanged
    public class ViewModelTest: INotifyPropertyChanged
    {
        private string testString = "aaaaaa";

        public ObservableCollection<myString> randomString = new ObservableCollection<myString>()
        {
           new myString{ randomStringValue="bbbbbbbbbbb"},
        };
        //ObservableCollection相当于一种List,增删改可以通知到界面。
        public ObservableCollection<myString> RandomString
        {
            get => randomString;
            set => SetProperty(ref randomString, value);
        }

        public string TestString
        {
            get => testString;
            set => SetProperty(ref testString, value);
        }

        public class myString
        { 
            public string randomStringValue { set; get; }
        }

        protected void SetProperty<T>(ref T prop, T value, [CallerMemberName] string propertyName = null)
        {
            if (EqualityComparer<T>.Default.Equals(prop, value) == false)
            {
                prop = value;
                OnPropertyChanged(propertyName);
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(String info)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}

界面

<Window x:Class="WPFTest.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:WPFTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="688.091" Width="1174.727" Background="LightBlue">
    <Grid>
        <Label Content="{Binding TestString}" 
               HorizontalAlignment="Left" 
               Height="29" Margin="204,116,0,0" Background="LightCyan" 
               VerticalAlignment="Top" Width="460"/>
        <Button Content="Button" HorizontalAlignment="Left" Height="43" 
                Margin="204,206,0,0" VerticalAlignment="Top" Width="144" Click="Button_Click"/>
        <Label Content=""  x:Name="label2"
            HorizontalAlignment="Left" 
            Height="29" Margin="204,163,0,0" Background="LightCyan" 
            VerticalAlignment="Top" Width="460"/>
        <TextBox HorizontalAlignment="Left" Height="36" Margin="204,75,0,0" 
                 TextWrapping="Wrap" Text="{Binding TestString,Mode=TwoWay}" 
                 VerticalAlignment="Top" Width="460"/>
        <Button Content="Button" HorizontalAlignment="Left" 
                Height="45" Margin="204,500,0,0" VerticalAlignment="Top" Width="169" Click="Button_Click_1"/>
        <DataGrid HorizontalAlignment="Left" x:Name="dataGrid1"
                  ItemsSource="{Binding RandomString}" AutoGenerateColumns="False"
                  Height="178" Margin="204,290,0,0" VerticalAlignment="Top" Width="688">
            <DataGrid.Columns>
                <DataGridTextColumn Header="randomStringValue" Binding="{Binding randomStringValue}" />
            </DataGrid.Columns>
        </DataGrid>

    </Grid>
</Window>

后端代码

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
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 JSON=System.Text.Json.JsonSerializer;

namespace WPFTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        ViewModelTest vm = new ViewModelTest();
        public MainWindow()
        {
            InitializeComponent();
            DataContext= vm;//必须要在此处指定DataContext,不指定则为当前类
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            vm.TestString = Guid.NewGuid().ToString();
            label2.Content = vm.TestString;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            vm.randomString.Add(
                new ViewModelTest.myString 
                {
                    randomStringValue=Guid.NewGuid().ToString()
                }
                );
        }
        public class Number
        {
            public string randomStringValue { set; get; }
        }
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 更改数据源时通知表格 更改List通知DataGrid 的相关文章

  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 当“”可以分配给std::string时,为什么有“clear”方法?

    一个可以用string clear函数清空字符串 也可以使用空双引号 来执行此操作 有什么不同 当您分配一个空字符串时 编译器必须在数据部分存储一个空的 C 字符串 并创建代码以将指向它的指针传递给赋值运算符 然后 赋值运算符必须从数据部分
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • ObservableCollection 上的“Cascade”绑定,包含其他 ObservableCollection

    我有一个项目需要显示合同列表 Class Affaire 每个合约都有一个阶段列表 类别阶段 我使用绑定在 2 个不同的 ListView 中显示它们中的每一个 问题是当我从 ListView 中删除一个 Phase 时 显示 Phases
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 在 DefaultHttpContext 上使用 FeatureCollection 时,响应对象为 null

    我正在测试一些 net Core 中间件 并希望使用整个 asp net Core http 管道来运行中间件 而不是模拟它 问题是 当我使用特征集合时 不知何故 响应对象没有在 httpRequest 中设置 并且它在请求本身上是只读的
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 将函数作为函数参数传递

    Unity C 似乎无法识别Func lt gt 作为函数委托的符号 那么 如何将函数作为函数参数传递呢 我有一个想法Invoke functionName 0 可能有帮助 但我不确定它是否实际上立即调用该函数 或者等待帧结束 还有别的办法
  • C# 记录类型:记录子类之间的相等比较

    给定父记录类型 public record Foo string Value 和两个记录子类Bar and Bee我想知道是否可以实施Equals在基类中 因此 Foo Bar 或 Bee 的实例都被考虑equal基于Value 两者都与E
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐

  • vue.runtime.esm.js2b0e619 [Vue warn] Error in render “TypeError Cannot read property ‘matched‘

    错误截图 踩坑原因 在配置vue router的路由时和将router实例挂载至Vue实例上时 实例名称没有按照标准 配置vue时 在配置vue router时 我们一般会将路由的映射关系抽成一个数组 就想下面这样 const routes
  • 小程序web-view 跳转到h5 监听返回按钮

    1 跳转到h5之后 先给页面堆栈 然后就可以监听到返回事件了
  • huggingface 自定义模型finetune训练测试--bert多任务

    背景 需要将bert改为多任务 但是官方仅支持多分类 二分类 并不支持多任务 改为多任务时我们需要修改输出层 loss 评测等 如果需要在bert结尾添加fc等也可以参考该添加方式 代码 修改model 这里把BertForSequence
  • MySQL之进阶查询语句

    这里写目录标题 一 按关键字排序 1 单字段升序排列 默认不指定是升序 2 单字段降序排列 3 结合where进行条件过滤 4 多字段排序 查询hp升序排列 相同hp的 id按降序排列 查询先按hp升序排列 相同分数的 id按升序排列 5
  • Golang-常见数据结构Slice

    Slice slice 翻译成中文就是切片 它和数组 array 很类似 可以用下标的方式进行访问 如果越界 就会产生 panic 但是它比数组更灵活 可以自动地进行扩容 了解 slice 的本质 最简单的方法就是看它的源码 runtime
  • llvm版本

    sudo update alternatives install usr bin llvm config llvm config usr bin llvm config 5 0 200 slave usr bin llvm ar llvm
  • RuntimeError:a leaf Variable that requires grad has been used in an in-place

    原文链接 https blog csdn net weixin 43056332 article details 115188116 记录一下训练yolov5碰到的问题 RuntimeError a leaf Variable that r
  • IP地址划分--主机号--子网号

    参考ip讲解 问题 假设一个主机的IP地址是202 112 14 137 掩码是255 255 255 224 主机IP地址的二进制表示11001010 01110000 00001110 10001001 子网掩码的二进制表示 11111
  • Vue3 + TS : Unexpected token,Did you mean `{‘}}` or `&rbrace`

    笔者今天开发的时候遇到了这样一个错误 Unexpected token Did you mean or rbrace 上述的是错误提示 如下图 问题出现的原因 问题出现的原因是因为在上图的73行 我这边做了一个类型的预测 后面获取的dom元
  • LeetCode 2396. 严格回文的数字

    如果一个整数 n 在 b 进制下 b 为 2 到 n 2 之间的所有整数 对应的字符串 全部 都是 回文的 那么我们称这个数 n 是 严格回文 的 给你一个整数 n 如果 n 是 严格回文 的 请返回 true 否则返回 false 如果一
  • UML与面向对象

    文章目录 1 面向对象开发 1 1 理解面向对象开发 1 2 面向对象的主要概念 1 3 OO开发的优点 2 OO开发中三层设计 3 UML简介 3 1 为什么对系统建模 3 2 UML的发展 3 3 UML的构成 3 3 1 模型 图 1
  • python入门知识(七):类

    文章目录 一 面向对象语言 二 对象语言的进化 三 类的定义 一 对象 1 构造函数 init 2 实例属性 3 实例方法 4 其他方法 二 类对象 1 类属性 2 类方法 3 静态方法 四 del 方法 析构函数 和垃圾回收机制 五 ca
  • STM32F103C8T6(HAL库)驱动舵机

    1 简介 常见的舵机分为360 和180 两种 本次对180 舵机进行驱动 舵机驱动需要通过PWM信号进行驱动 本文通过定时器中的PWM信号设定使得SG90舵机进行不同角度的转动 2 PWM信号和舵机角度关系 对于舵机的驱动 需要20ms的
  • vue3+ts深入组件(四)动态组件

    一 引入 掌握程度 了解 使用Vue时 有时会遇到tab切换 如下图 1 可实现方法 1 v if 2 component动态组件 3 使用vue Router 路由切换 2 对比 第一种方法 v if 这可能是我们能最快想到的解决办法 但
  • 学习笔记:Improved Techniques for Training GANs理解

    论文链接 https arxiv org abs 1606 03498 这是一篇对GAN的训练作出改进的文章 众所周知 GAN的训练是极其不稳定的 转载请注明 1 主要内容 对GAN网络提出一些改进的体系特征和训练过程 然后把这些改进应用到
  • 汇聚、集群、聚合

    园区网络CSS iStack 主要特点 简单 各层设备均使用堆叠 集群技术 天然无环 无需跑其他协议来冗余备份 高效 配置简单 各层设备间使用链路聚合技术 链路利用率高 可靠 堆叠 链路聚合 各层设备形成双归接入组网 提高整网可靠性 我们所
  • 关于RAM溢出的解决方法 keil 5 L6220E:RW_IRAM1

    keil 5 L6220E RW IRAM1 在做bootloader时候遇到了这样的报错 xxxx xxxx axf Error L6220E Execution region RW IRAM1 size 60420 bytes exce
  • 数据库设计基本步骤 / 数据库设计原则

    基本步骤 按照规范设计的方法 同时考虑数据库及其应用系统开发的全过程 可以将数据库设计分为以下 6 个阶段 需求分析阶段 需求分析是数据库设计的第一步 也是整个设计过程的基础 本阶段的主要任务是对现实世界要处理的对象 公司 部门及企业 进行
  • MBED移植日记:gpio_api移植(基于STM32F107RC)

    本文是继MBED串口API移植的又一篇系列文章 前阵子忙着赶项目 移植完了却没来得及写成文章来分享 今天来补上 一来可以温故知新 二来也可以献出自己的一点微薄之力 写的不好 移植的也不一定好 请大家多多指教 本文的gpio api模块与mb
  • WPF 更改数据源时通知表格 更改List通知DataGrid

    用到集合ObservableCollection 此集合微软的解释为 动态收集数据并通知到显示的控件 无论数据是刷新 删除 增加 更新 新建Model 注意看里面的大小写 using System using System Collecti