UWP蓝牙BLE设备列表变更时更新设备数量通知实现求助
解决UWP BLE扫描设备数量通知及移除更新问题
嘿,我来帮你搞定这个UWP BLE设备数量通知的需求!结合你现有的代码,咱们分两部分实现:初始扫描的数量通知,以及设备移除时的实时更新通知。
一、优化初始扫描的设备数量通知
你现有的代码已经在扫描完成时通知了设备数量,但可以调整得更清晰准确。比如扫描完成后统一统计并通知,避免重复触发(如果是批量添加设备的话):
// 你的原有设备判断逻辑 if (FindBluetoothLEDeviceDisplay(deviceInfo.Id) == null) { if (!string.IsNullOrEmpty(deviceInfo.Name)) { // 添加到已识别设备列表 KnownDevices.Add(new BluetoothLEDeviceDisplay(deviceInfo)); } else { // 添加到未命名设备列表,等待后续名称更新 UnknownDevices.Add(deviceInfo); } } // 扫描完成后统一发送通知,明确区分已识别和未命名设备数量 rootPage.NotifyUser($"初始扫描完成:已发现 {KnownDevices.Count} 个可识别BLE设备,{UnknownDevices.Count} 个未命名设备。", NotifyType.StatusMessage);
这样用户能清楚知道两类设备的数量,当然如果不需要展示未命名设备,只保留KnownDevices.Count即可。
二、实现设备移除时的实时数量更新通知
UWP中管理动态列表通常用ObservableCollection<T>(它自带集合变化通知),咱们可以通过监听它的CollectionChanged事件来捕捉设备移除操作,然后实时更新通知:
第一步:确保列表是ObservableCollection类型
首先确认你的KnownDevices定义为ObservableCollection(如果还不是的话):
// 替换成ObservableCollection,支持集合变化通知 public ObservableCollection<BluetoothLEDeviceDisplay> KnownDevices { get; } = new ObservableCollection<BluetoothLEDeviceDisplay>();
第二步:绑定集合变化事件
在页面初始化(比如构造函数)或者ViewModel初始化时,给KnownDevices添加事件监听:
// 监听集合的添加/移除变化 KnownDevices.CollectionChanged += KnownDevices_CollectionChanged;
第三步:实现事件处理逻辑
编写事件处理方法,当设备被移除时立即更新通知:
private void KnownDevices_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { // 只处理设备移除的情况 if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { rootPage.NotifyUser($"设备已移除,当前可识别BLE设备数量:{KnownDevices.Count}", NotifyType.StatusMessage); } // 可选:如果需要在扫描过程中实时通知新发现的设备,添加下面的判断 else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { rootPage.NotifyUser($"发现新BLE设备,当前可识别设备数量:{KnownDevices.Count}", NotifyType.StatusMessage); } }
如果你的UnknownDevices也需要处理移除通知,同样的逻辑给它绑定CollectionChanged事件即可。
注意哦:如果你的代码是基于MVVM模式,直接引用rootPage可能不太符合设计原则,这时可以用消息传递框架(比如Prism的EventAggregator)来发送通知,但如果是代码-behind的实现方式,直接用rootPage完全没问题。
内容的提问来源于stack exchange,提问作者Yann Kang
相关产品推荐
相关产品推荐

