You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:59:22