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
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
win10 uwp 通知列表的更多相关文章
- win10 uwp 通知Toast
win10通知使用Toast 可以使用win10 模板添加通知 var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; 使用Ge ...
- win10 uwp 如何使用DataTemplate
这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...
- win10 uwp 入门
UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- 【Win10 UWP】后台任务与动态磁贴
动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...
- win10 uwp 商业游戏 1.1.5
本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
随机推荐
- 【Alpha】——Seventh Scrum Meeting
一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 将项目做成APK 用户界面改善 郑靖涛 协助设计账目一览表板块 用户界面改善 杨海亮 查询功能测试 用户界 ...
- 201521123095 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 Q1 List中指定元素的删除(题目4-1) 1.1 实验总结 对于删除函数 ...
- 201521123040《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...
- 第2周作业-Java基本语法与类库(20170227-20170304)
本周学习总结 (1)这周学习认识和熟悉了java的一些类型和变量: (2)学习了java的运算符基本使用方法: (3)了解了如何建立远程仓库和本地仓库,和如何让java代码在临时储存,本地仓库和远程仓 ...
- 201521123039 《java程序设计》第一周学习总结
#1.本章学习总结 Java是面向对象的程序语言,它一切定义都是对象.我们所编写的Java程序经过编译后生成了*.class的文件,再经过JVM对*.class解释运行就可以得到Java程序,所以Ja ...
- Exception in thread "main" org.hibernate.MappingException: You may only specify a cache for root
如果出现类似下面的错误: Exception in thread "main" org.hibernate.MappingException: You may only speci ...
- 泛型在Web中的作用
当我们写网页的时候,常常会有多个DAO,我们要写每次都要写好几个DAO,这样会有点麻烦. 那么我们想要的效果是什么呢??只写一个抽象DAO,别的DAO只要继承该抽象DAO,就有对应的方法了. 要实现这 ...
- GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction 升讯威微信营销系统开发实践系列升讯威微信营销系统开发实践:(1)功能设计与架构设 ...
- BootStrap基礎知識
BootStrap基礎知識 1. .lead //突出 .text-left //文字居左 .text-right //文字居右 .text-center //文字居中 .text-justify / ...
- Eclipse 版本选择
查看Eclipse的版本号: 1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字 ...