/// <summary>
    /// Click handler for the 'ListSmartCard' button.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private async void ListSmartCard_Click(object sender, RoutedEventArgs e)
    {
        Button b = sender as Button;
        b.IsEnabled = false;
        try
        {
            rootPage.NotifyUser("Enumerating smart cards...",
                                NotifyType.StatusMessage);

            // This list will be bound to our ItemListView once it has been
            // filled with SmartCardListItems.  The SmartCardListItem class
            // is defined above, and describes a reader/card pair with a
            // reader name and a card name.
            List<SmartCardListItem> cardItems = new List<SmartCardListItem>();

            // First we get the device selector for smart card readers using
            // the static GetDeviceSelector method of the SmartCardReader
            // class.  The selector is a string which describes a class of
            // devices to query for, and is used as the argument to
            // DeviceInformation.FindAllAsync.  GetDeviceSelector is
            // overloaded so that you can provide a SmartCardReaderKind
            // to specify if you are only interested in a particular type
            // of card/reader (e.g. TPM virtual smart card.)  In this case
            // we will list all cards and readers.
            string selector = SmartCardReader.GetDeviceSelector();
            DeviceInformationCollection devices =
                await DeviceInformation.FindAllAsync(selector);

            // DeviceInformation.FindAllAsync gives us a
            // DeviceInformationCollection, which is essentially a list
            // of DeviceInformation objects.  We must iterate through that
            // list and instantiate SmartCardReader objects from the
            // DeviceInformation objects.
            foreach (DeviceInformation device in devices)
            {
                SmartCardReader reader =
                    await SmartCardReader.FromIdAsync(device.Id);

                // For each reader, we want to find all the cards associated
                // with it.  Then we will create a SmartCardListItem for
                // each (reader, card) pair.
                IReadOnlyList<SmartCard> cards =
                    await reader.FindAllCardsAsync();

                foreach (SmartCard card in cards)
                {
                    SmartCardProvisioning provisioning =
                        await SmartCardProvisioning.FromSmartCardAsync(card);

                    SmartCardListItem item = new SmartCardListItem()
                        {
                            ReaderName = card.Reader.Name,
                            CardName = await provisioning.GetNameAsync()
                        };

                    cardItems.Add(item);
                }
            }

            // Bind the source of ItemListView to our SmartCardListItem list.
            ItemListView.ItemsSource = cardItems;

            rootPage.NotifyUser("Enumerating smart cards completed.",
                                NotifyType.StatusMessage);

        }
        catch (Exception ex)
        {
            rootPage.NotifyUser(
                "Enumerating smart cards failed with exception: " +
                ex.ToString(),
                NotifyType.ErrorMessage);
        }
        finally
        {
            b.IsEnabled = true;
        }
    }
        /// <summary>
        /// Click handler for the 'ListSmartCard' button.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void ListSmartCard_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;

            b.IsEnabled = false;
            try
            {
                rootPage.NotifyUser("Enumerating smart cards...",
                                    NotifyType.StatusMessage);

                // This list will be bound to our ItemListView once it has been
                // filled with SmartCardListItems.  The SmartCardListItem class
                // is defined above, and describes a reader/card pair with a
                // reader name and a card name.
                List <SmartCardListItem> cardItems = new List <SmartCardListItem>();

                // First we get the device selector for smart card readers using
                // the static GetDeviceSelector method of the SmartCardReader
                // class.  The selector is a string which describes a class of
                // devices to query for, and is used as the argument to
                // DeviceInformation.FindAllAsync.  GetDeviceSelector is
                // overloaded so that you can provide a SmartCardReaderKind
                // to specify if you are only interested in a particular type
                // of card/reader (e.g. TPM virtual smart card.)  In this case
                // we will list all cards and readers.
                string selector = SmartCardReader.GetDeviceSelector();
                DeviceInformationCollection devices =
                    await DeviceInformation.FindAllAsync(selector);

                // DeviceInformation.FindAllAsync gives us a
                // DeviceInformationCollection, which is essentially a list
                // of DeviceInformation objects.  We must iterate through that
                // list and instantiate SmartCardReader objects from the
                // DeviceInformation objects.
                foreach (DeviceInformation device in devices)
                {
                    SmartCardReader reader =
                        await SmartCardReader.FromIdAsync(device.Id);

                    // For each reader, we want to find all the cards associated
                    // with it.  Then we will create a SmartCardListItem for
                    // each (reader, card) pair.
                    IReadOnlyList <SmartCard> cards =
                        await reader.FindAllCardsAsync();

                    foreach (SmartCard card in cards)
                    {
                        SmartCardProvisioning provisioning =
                            await SmartCardProvisioning.FromSmartCardAsync(card);

                        SmartCardListItem item = new SmartCardListItem()
                        {
                            ReaderName = card.Reader.Name,
                            CardName   = await provisioning.GetNameAsync()
                        };

                        cardItems.Add(item);
                    }
                }

                // Bind the source of ItemListView to our SmartCardListItem list.
                ItemListView.ItemsSource = cardItems;

                rootPage.NotifyUser("Enumerating smart cards completed.",
                                    NotifyType.StatusMessage);
            }
            catch (Exception ex)
            {
                rootPage.NotifyUser(
                    "Enumerating smart cards failed with exception: " +
                    ex.ToString(),
                    NotifyType.ErrorMessage);
            }
            finally
            {
                b.IsEnabled = true;
            }
        }