文章目錄
- 前言
- 一、核心概念簡介
- ObservableCollection
- List
- 二、關鍵差異對比
- 三、典型使用場景
- ObservableCollection 的適用場景
- List 的適用場景
- 四、在Community Toolkit MVVM中使用ObservableCollection<Data>和List<Data>
- 場景1:動態列表(ObservableCollection)
- 場景1:靜態列表(List)
- 總結
前言
在WPF項目中如何去選擇使用ObservableCollection 與 List集合
一、核心概念簡介
ObservableCollection
ObservableCollection 是 .NET 提供的可觀察集合類,繼承自 Collection,并實現了 INotifyCollectionChanged 和 INotifyPropertyChanged 接口。其核心特性是:當集合內容(如元素添加、刪除、替換或重置)發生變更時,會主動觸發事件通知訂閱者
List
List 是最常用的泛型列表類,繼承自 IList、ICollection 等接口。它基于動態數組實現,提供高效的隨機訪問和增刪操作,但默認不支持集合變更通知
二、關鍵差異對比
特性 | ?ObservableCollection | List |
---|---|---|
變更通知 | 支持(通過 CollectionChanged 事件) | 不支持 |
適用場景 | 需要數據綁定或監聽集合變更的場景(如 UI 控件) | 后臺數據處理、無需通知的高頻操作場景 |
內存占用 | 略高(需維護事件訂閱機制) | 更低 |
三、典型使用場景
ObservableCollection 的適用場景
- UI 數據綁定?:在 WPF、UWP 或 WinUI 中,綁定到 ListBox、DataGrid 等控件時,集合內容變更需自動同步到界面
- 狀態監控?:需要監聽集合變更并觸發其他邏輯(如日志記錄、統計更新)
List 的適用場景
- 后臺數據處理?:如算法計算、批量數據導入導出,無需外部感知集合變更
- 高頻增刪操作?:頻繁添加/刪除元素時(如臨時緩存),避免事件通知帶來的性能開銷
四、在Community Toolkit MVVM中使用ObservableCollection和List
場景1:動態列表(ObservableCollection)
// ViewModel
[ObservableProperty]
private ObservableCollection<Data> _apiData1;public void AddData(Data item)
{_apiData1.Add(item); // UI自動刷新
}// XAML綁定
<ListView ItemsSource="{Binding ApiData1}"/>
效果?:向_apiData1添加/刪除元素時,綁定控件自動更新
場景1:靜態列表(List)
[ObservableProperty]
private List<Data> _apiData2;public void ReplaceData(List<Data> newData)
{ApiData2 = newData; // 需整個集合替換才能觸發UI更新
}
局限?:若通過_apiData2.Add()修改集合,UI不會刷新,需手動調用OnPropertyChanged(nameof(ApiData2))
總結
ObservableCollection 與 List 的核心差異在于是否支持集合變更通知。前者適用于需要數據綁定或監聽變更的場景(如 UI 開發),后者更適合后臺數據處理或高頻操作場景