Xamarin BLE插件:ListView不显示扫描设备的信息

时间:2019-09-19 17:08:27

标签: c# xamarin bluetooth-lowenergy

我正在使用Xamarin的BLE插件来扫描设备。然后,我想列出设备的ID。但是,我的ListView没有显示ID(只是显示空字段)。

Cs:

        IBluetoothLE ble;
        IAdapter adapter;
        ObservableCollection<IDevice> deviceList;
        IDevice device;

        public BltScan()
        {
            InitializeComponent();

            ble = CrossBluetoothLE.Current;
            adapter = CrossBluetoothLE.Current.Adapter;
            deviceList = new ObservableCollection<IDevice>();
            bltlist.ItemsSource = deviceList;

            scan();
        }

        public async void scan()
        {
            try
            {
                deviceList.Clear();
                adapter.DeviceDiscovered += (s, a) =>
                {

                    deviceList.Add(a.Device);
                    // DisplayAlert("Disc", a.Device.Id.ToString(), "OK");
                };

                //We have to test if the device is scanning 
                if (!ble.Adapter.IsScanning)
                {
                    await adapter.StartScanningForDevicesAsync();

                }
            }
            catch (Exception ex)
            {
                DisplayAlert("Notice", ex.Message.ToString(), "Error !");
            }
        }

XAML:

        <ListView x:Name="bltlist">
            <ListView.ItemTemplate>
                 <DataTemplate>
                    <TextCell Text="{Binding Id}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

将设备添加到deviceList时,我会发出警报,它会正确显示扫描设备的ID。

甚至更多:我做了一个包装器类,用于存储一个IDevice,它的ID为String,但ListView仍然不显示ID。我什至可以在Text="{Binding GarbageField}"中输入一个不存在的字段,它不会抱怨,只是列出所有设备并显示任何内容。

我关注了https://www.youtube.com/watch?v=UMbb5FwGWSwhttps://github.com/didourebai/BLEPluginDemo,并在youtube评论中看到其他人也遇到了同样的困难。但是我找不到这个问题的答案。

1 个答案:

答案 0 :(得分:0)

以防您无法正常工作。 您也可以收集字符串,然后在找到新设备后从该列表中添加和删除。 当用户单击设备时,将获得该列表中的ID并从设备列表中获得相同的ID