xaml:

<DockPanel Margin="10">
                <StackPanel DockPanel.Dock="Right" Margin="10,0,0,0">
                        <Button Name="btnAddUser" Click="btnAddUser_Click">Add user</Button>
                        <Button Name="btnChangeUser" Click="btnChangeUser_Click" Margin="0,5">Change user</Button>
                        <Button Name="btnDeleteUser" Click="btnDeleteUser_Click">Delete user</Button>
                </StackPanel>
                <ListBox Name="lbUsers" DisplayMemberPath="Name"></ListBox>
        </DockPanel>
using System.ComponentModel;
using System.Collections.ObjectModel; namespace WpfTutorialSamples.DataBinding
{
        public partial class ChangeNotificationSample : Window
        {
                private ObservableCollection<User> users = new ObservableCollection<User>();                 public ChangeNotificationSample()
                {
                        InitializeComponent();                         users.Add(new User() { Name = "John Doe" });
                        users.Add(new User() { Name = "Jane Doe" });                         lbUsers.ItemsSource = users;
                }                 private void btnAddUser_Click(object sender, RoutedEventArgs e)
                {
                        users.Add(new User() { Name = "New user" });
                }                 private void btnChangeUser_Click(object sender, RoutedEventArgs e)
                {
                        if(lbUsers.SelectedItem != null)
                                (lbUsers.SelectedItem as User).Name = "Random Name";
                }                 private void btnDeleteUser_Click(object sender, RoutedEventArgs e)
                {
                        if(lbUsers.SelectedItem != null)
                                users.Remove(lbUsers.SelectedItem as User);
                }
        }         public class User : INotifyPropertyChanged
        {
                private string name;
                public string Name {
                        get { return this.name; }
                        set
                        {
                                if(this.name != value)
                                {
                                        this.name = value;
                                        this.NotifyPropertyChanged("Name");
                                }
                        }
                }                 public event PropertyChangedEventHandler PropertyChanged;                 public void NotifyPropertyChanged(string propName)
                {
                        if(this.PropertyChanged != null)
                                this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
                }
        }
}
 

WPF ObservableCollection,INotifyPropertyChanged的更多相关文章

  1. WPF使用 INotifyPropertyChanged 实现数据驱动

    如下图,有这么一个常见需求,在修改表单明细的苹果价格时,总价会改变,同时单据总和也随之改变. 按照Winfrom事件驱动的思想来做的话,我们就需要在将UI的修改函数绑定到CellEdit事件中来实现. ...

  2. WPF Binding INotifyPropertyChanged 多线程 深入理解

    例子 先来看一个例子 Person.cs public class Person : ObservableObject,INotifyPropertyChanged { private string ...

  3. WPF ObservableCollection 异步调用问题

    问题介绍 当ObservableCollection列表被UI线程占用时,如果在异步线程中调用ObservableCollection,会弹出以下异常: 问题分析 我们使用一个viewModel,在V ...

  4. WPF中INotifyPropertyChanged用法与数据绑定

    在WPF中进行数据绑定的时候常常会用到INotifyPropertyChanged接口来进行实现,下面来看一个INotifyPropertyChanged的案例. 下面定义一个Person类: usi ...

  5. wpf中INotifyPropertyChanged的用法

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using Sy ...

  6. WPF 实现INotifyPropertyChanged .Net Framework 4.5

    自己动手写了一个基类来实现INotifyPropertyChanged接口,以后可以直接使用. using System.ComponentModel; using System.Runtime.Co ...

  7. WPf ObservableCollection异步调用问题

    当ObservableCollection列表被UI线程占用时,如果在异步线程中调用ObservableCollection,会弹出以下异常: private void Button1_OnClick ...

  8. WPF 之 INotifyPropertyChanged 接口的使用 (一)

    一.INotifyPropertyChanged 的基本概念 ​ INotifyPropertyChanged 的作用:通知客户端属性值已经更改.详细信息见:INotifyPropertyChange ...

  9. WPF 之命令(七)

    一.前言 ​ 事件的作用是发布和传播一些消息,消息送达接收者,事件的使命也就完成了,至于消息响应者如何处理发送来的消息并不做规定,每个接收者可以使用自己的行为来响应事件.即事件不具有约束力. ​ 命令 ...

随机推荐

  1. Objective-C学习——中文URL编码和解码

    发现NSString类中有内置的方法可以实现.他们分别是: - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncod ...

  2. Python的爬虫利器之urllib

    urllib包 urllib是一个包含几个模块来处理请求的库:  - urllib.request发送http请求  - urllib.error处理请求过程中出现的异常  - urllib.pars ...

  3. Django类

    django 1.中间件   中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行p ...

  4. 201871010101-陈来弟《面向对象程序设计(Java)》第十一周学习总结

    201871010101-陈来弟<面向对象程序设计(Java)>第十一周学习总结 实验九  泛型程序设计技术 实验时间 2019-11-8 第一部分:理论基础知识 1.什么是泛型类 泛型是 ...

  5. 201871010128-杨丽霞《面向对象程序设计(Java)》第十一周学习总结

    201871010128-杨丽霞<面向对象程序设计(Java)>第十一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. HTML与CSS学习笔记(2)

    1.CSS背景样式? background-color 背景色 background-image 背景图 url(背景地址) 默认:会水平垂直铺满背景图 background-repeat 平铺方式 ...

  7. HDFS 分布式文件系统

    博客出处W3c:https://www.w3cschool.cn/hadoop/xvmi1hd6.html 简介 Hadoop Distributed File System,分布式文件系统 架构 B ...

  8. http中get,post,put,delete方法的用法以及区别

    http协议是一种在网络中进行文件传送遵循的协议.一种无状态的协议.http协议服务器端不跟浏览器端建立长久的通信连接. 建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求.当然一 ...

  9. 以opencv320和vs2013为例说明 vs路径配置方法

    =========================================== 新方法 ======================= 新方法的配置过程,路径之类的设置都是一样. 区别在于,在 ...

  10. Linux下Maven安装(十二)

    一.前提条件 下载并安装好JDK .在终端输入命令“java -version”,如果出现类似如下信息说明JDK安装成功. 二.开始配置Maven 1. 下载maven:http://mirror.b ...