日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

win10 uwp 通知列表

發布時間:2024/10/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win10 uwp 通知列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經常看到小伙伴問,問已經綁定列表,在進行修改時,不會通知界面添加或刪除。這時問題就在,一般使用的列表不會在添加時通知界面,因為他們沒有通知。

本文:知道什么是通知的列表,如何去寫一個通知列表

<!--more-->

在 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 ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。如有任何疑問,請與我聯系。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

轉載于:https://www.cnblogs.com/lindexi/p/6949657.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的win10 uwp 通知列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。