public void Scan()
        {
            if (IsScanning == true)
            {
                scan?.Dispose();
                IsScanning = false;
            }
            else
            {
                ScanedDevices.Clear();
                IsScanning = true;

                scan = CrossBleAdapter.Current.Scan().Subscribe(result =>
                {
                    Device.BeginInvokeOnMainThread(() => {
                        this.AddDevice(result);
                    });
                });
            }
        }
        private void AddDevice(IScanResult result)
        {
            bool isExited = false;
            int  index    = 0;

            foreach (var device in ScanedDevices)
            {
                if (device.Uuid.Equals(result.Device.Uuid.ToString()))
                {
                    isExited = true;
                    device.Update(result);
                    break;
                }
                index++;
            }

            if (isExited == false)
            {
                if (IsFavorite)
                {
                    return;
                }

                if (IsFiltering == false)
                {
                    var d = new DeviceViewModel(result);
                    ScanedDevices.Add(d);
                }
                else
                {
                    var d = new DeviceViewModel(result);
                    if (this.IsMeetFilteringCondition(d, filteringParam))
                    {
                        ScanedDevices.Add(d);
                    }
                }
            }
        }
        public void EnableFavorite()
        {
            if (IsFavorite)
            {
                int index       = 0;
                var deleteIndex = new List <int>();

                foreach (var device in ScanedDevices)
                {
                    if (!device.IsFavorite)
                    {
                        deleteIndex.Add(index);
                    }
                    index++;
                }

                deleteIndex.Reverse();
                foreach (var i in deleteIndex)
                {
                    ScanedDevices.RemoveAt(i);
                }
            }
        }
        public void EnableFiltering()
        {
            if (IsFiltering)
            {
                int index       = 0;
                var deleteIndex = new List <int>();

                foreach (var device in ScanedDevices)
                {
                    if (!this.IsMeetFilteringCondition(device, filteringParam))
                    {
                        deleteIndex.Add(index);
                    }
                    index++;
                }

                deleteIndex.Reverse();
                foreach (var i in deleteIndex)
                {
                    ScanedDevices.RemoveAt(i);
                }
            }
        }