WPF ListView ItemsSource 綁定 DataTable(lstvAlarm.DataContext = dtAlarmDisplay)。
當**已選中某行**時,切換篩選條件(如報警等級「高級」→「中級」):
DataTable 作為 ItemsSource 時,WPF 內部使用 DataView 進行排序/篩選。**選中行會導致 DataView 內部游標/位置狀態鎖定**,當 DataTable 內容變更(Rows.Clear() 後重新填充)時,DataView 未正確重置游標,導致 UI 不感知集合變更。
// 刷新數據前
lstvAlarm.SelectedItem = null; // 或 lstvAlarm.UnselectAll()
// 再更新 DataTable
dtAlarmDisplay.Rows.Clear();
dtAlarmDisplay.Merge(newData);
var view = CollectionViewSource.GetDefaultView(dtAlarmDisplay);
view.Refresh(); // 強制 UI 重新讀取
定義實體類 AlarmItem,ViewModel 暴露 ObservableCollection<AlarmItem>,篩選時 Clear() + AddRange(),WPF 自動響應 INotifyCollectionChanged,**徹底避開 DataView 游標問題**。
DataTable 綁定 WPF 控件時,**選中態與集合變更通知易衝突**。最穩健做法是**ViewModel 層轉換為 ObservableCollection<T>**;若必須用 DataTable,刷新前**強制清空選中**或**手動 Refresh View**。