原文:2018-12-25-win10-uwp-通知列表

title author date CreateTime categories
win10 uwp 通知列表
lindexi
2018-12-25 18:12:33 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

经常看到小伙伴问,问已经绑定列表,在进行修改时,不会通知界面添加或删除。这时问题就在,一般使用的列表不会在添加时通知界面,因为他们没有通知。
本文:知道什么是通知的列表,如何去写一个通知列表。

在 C# 很少直接使用数组,因为数组难以指定类型,需要指定类型的,一般都会使用 List<T> 。而 List 我就叫他列表,继承 ICollection 的类,一般就可以叫列表。

但是在使用 ListView 直接给 List 作为 Source ,那么只会在初次显示,之后无论对 List 进行什么修改,都不会导致界面的列表项修改。

当然如果列表使用的类的属性有通知,对他进行修改,还是可以看到界面修改。

如果希望对列表修改时,界面也变化,那么简单方法是使用 ObservableCollection

不需要对 ObservableCollection 的属性进行通知,也就是 下面代码实际是不需要的

        public ObservableCollection<string> ObservableCollection
{
set
{
_observableCollection = value;
OnPropertyChanged();
}
get
{
return _observableCollection;
}
} private ObservableCollection<string> _observableCollection;

如果需要修改项,只需要进行和List一样的添加或移除元素就可以。

如果想问,为何使用 ObservableCollection 就可以通知界面修改了元素,而使用 List 就不可以。

其实因为 ObservableCollection 继承了 INotifyCollectionChanged ,他可以通知 ListView 说修改了项。

如果对于上面的说法觉得还是不行,那么深一点,来解释一下 ListView 是如何知道 ObservableCollection 修改了。

首先在给 Source 值的时候,会自动判断是不是有 INotifyCollectionChanged ,如果是的话,自动监听。

因为 ListView 的 Source 大概就是这样,下面代码和真的 Source 是不一样,但是大概也是这样的

         /// <summary>
/// 标识 <see cref="Source"/> 的依赖项属性。
/// </summary>
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(object), typeof(MainPage), new PropertyMetadata(default(object), (s, e) =>
{
var c = s as INotifyCollectionChanged;
if (c != null)
{
c.CollectionChanged += (sender, args) =>
{
switch (args.Action)
{
case NotifyCollectionChangedAction.Add:
break;
case NotifyCollectionChangedAction.Move:
break;
case NotifyCollectionChangedAction.Remove:
break;
case NotifyCollectionChangedAction.Replace:
break;
case NotifyCollectionChangedAction.Reset:
break;
default:
throw new ArgumentOutOfRangeException();
}
};
}
})); /// <summary>
/// 获取或设置
/// </summary>
public object Source
{
get { return (object) GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}

判断传入的是不 INotifyCollectionChanged ,如果是的话,获取他修改时,是什么,添加或删除,修改的元素是哪个。

于是这样就可以绑定时,进行修改 列表就可以让界面得到。

那么 ObservableCollection 缺少了很多东西,如添加多个元素,需要每次都进行 遍历,是不是可以自己写一个和 ObservableCollection 差不多的?

于是我就来写一个,很简单的代码

首先需要给他一个名字,这里是随意给的。

但是命名是需要时间,经过很久,我想到诡异的名字。

需要做一个泛型,然后继承 Collection 和通知。继承 Collection 可以少写代码,因为基本的添加他做了。

    public class AvaloniaCol<T> : Collection<T>, INotifyCollectionChanged

那么继承了 Collection 不可以直接写添加函数,如何做?实际他可以直接 InsertItem 就是添加会调用。

         protected override void InsertItem(int index, T item)
{
base.InsertItem(index, item);
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, index));
}

需要做的就是使用 原来的方法,但是加一个通知,通知时需要告诉当前是添加和添加的元素

写了添加自然需要写删除

         protected override void RemoveItem(int index)
{
var temp = this[index];
base.RemoveItem(index);
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, temp, index));
}

代码就这么简单,在界面写个按钮,用于添加或移除

可以看到界面就是进行变换,就这么简单写通知列表。

代码:http://download.csdn.net/detail/lindexi_gd/9826807

2018-12-25-win10-uwp-通知列表的更多相关文章

  1. win10 uwp 通知列表

    经常看到小伙伴问,问已经绑定列表,在进行修改时,不会通知界面添加或删除.这时问题就在,一般使用的列表不会在添加时通知界面,因为他们没有通知. 本文:知道什么是通知的列表,如何去写一个通知列表 在 C# ...

  2. win10 uwp 通知Toast

    win10通知使用Toast 可以使用win10 模板添加通知 var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; 使用Ge ...

  3. 2018.12.25 SOW

    1. Understanding Customer Requirements 11.1. Project Overview 21.2. System Requirements 21.3. Indust ...

  4. 2018.12.25 Spring中JDBCTemplate模版API学习

    1 Spring整合JDBC模版 1.1 spring中土拱了一个可以操作数据库的对象.对象封装了jdbc技术 JDBCTemplateJDBC模板对象 1.2 与DBUtils中的QueryRunn ...

  5. win10 uwp 如何使用DataTemplate

    这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...

  6. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  7. 12.25模拟赛T1

    可以区间dp,但是复杂度太高. 所以应该是贪心,怎么贪心呢? 这种题目,最好还是手玩找一些规律. 可以发现,由于保证可以m次填完,所以颜色之间没有相互包含关系. 比较像分治的模型. 所以考虑拿到一个区 ...

  8. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

  9. Win10 UWP开发系列:实现Master/Detail布局

    在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...

  10. 【Win10 UWP】后台任务与动态磁贴

    动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...

随机推荐

  1. Linux 部署 FastDFS

    FastDFS 安装规划: 项目 信息 Group Name group1 FastDFS安装主目录 /usr/local/fastdfs-5.0.8 FastDFS work主目录 /usr/loc ...

  2. go语言之数组

    1.go语言的数组和python的列表不一样,python的列表没有限定类型,而go的数组限定的类型,理由是这样的,请看下面的图 go语言的数组会数组中第一个值的内存地址,在我们上面的例子中,数组中的 ...

  3. rpm软件包安装与管理

    一.软件包分类 1.软件包分类 源码包 二进制包 2.源码包 2.1 源码包什么样 直接由编程语言写成,没经过编译.类似于java的 .calss 文件,c的 .c文件. [root@love2 ~] ...

  4. Concepts & Implementation of PLs

    http://perugini.cps.udayton.edu/teaching/courses/Spring2015/cps352/index.html#lecturenotes Programmi ...

  5. css3动画如何解决动画的播放、暂停和重新开始

    0921自我总结 css3如何解决动画的播放.暂停和重新开始 一.解决的本质思路 播放的解决思路 先定义好动画效果通过类名的增加达到样式的出现 暂停的解决思路 我们播放动画时,如要暂停动画,就要用到a ...

  6. Java生鲜电商平台-商城优惠券设计要点复盘与总结

    Java生鲜电商平台-商城优惠券设计要点复盘与总结 Java生鲜电商平台本文将从优惠券设计用户端,需求端,业务流程全方案解析优惠券设计方案 为什么要设计优惠券 设计优惠券的核心:拉新和促活 新产品上线 ...

  7. SSH框架之Hibernate第一篇

    1.2Hibernate的概述: 1.2.1 什么Hibernate? Hibernate(开发源代码的对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它 ...

  8. 松软科技web课堂:SQLServer之NOW() 函数

    NOW() 函数 NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间. SQL NOW() 语法 SELECT ...

  9. webpack + typescript + babel打包*.min.js文件的环境配置

    将多个*.ts文件打包成一个*.min.js文件的开发配置 1.初始化 npm init 新建以下文件目录: 2.安装依赖: "devDependencies": { " ...

  10. 快速掌握Docker必备基础知识

    快速掌握Docker必备基础知识 Docker是时下热门的容器技术,相信作为一名开发人员,你一定听说过或者使用过,很多人会把Docker理解为一个轻量级虚拟机,但其实Docker与虚拟机(VM)是两种 ...