UWP C # Привязка элементов JSON к кнопке MenuFlyout - PullRequest
0 голосов
/ 14 октября 2018

У меня есть динамический список клиентских устройств, которые будут добавлены по сети.После подключения их данные сохраняются в файле JSON.Я хотел бы иметь дополнительное отображение и управление клиентскими устройствами, где я нажимаю кнопку Add с MenuFlyout, заполненным списком ClientName клиентских устройств из JSON.файл.Как только menuitem будет выбран, он добавит кнопку и индикатор состояния соединения (например, подключен, отключен или ошибка) для соответствующего клиентского устройства, выбранного в сетке. Это то, что я сделал для добавления кнопки, но не смог понять, как привязать к JSON

Пожалуйста, помогите.Спасибо.

мой класс json создан в отдельном .cs json file Я не уверен, что правильно сделал это в MenuFlyoutItem_Click, где item.clientname имеет ошибку.

Файл json clientslist.txt Я проверил формат, который кажется правильным.The JSON file

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Мне удается использовать serialization.json, чтобы сделать это

 private async void AddButton_Click(object sender, RoutedEventArgs e)
    {
        List<ClientList> clientLists;
        var jsonSerializer = new DataContractJsonSerializer(typeof(List<ClientList>));
        try
        {
            var myStream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(CLIENTSLIST);

            clientLists = (List<ClientList>)jsonSerializer.ReadObject(myStream);
            var menuFlyout = new MenuFlyout();

            foreach (var device in clientLists)
            {
                var menuFlyoutItem = new MenuFlyoutItem() { Name = device.clientname, Text = device.clientname };
                menuFlyoutItem.Tag = device.clientname;
                menuFlyoutItem.Click += MenuFlyoutItem_Click;
                menuFlyout.Items.Add(menuFlyoutItem);
            }
            AddButton.Flyout = menuFlyout;
        }
        catch (Exception)
        {
            //Do nothing, file doesn't exist
        }
    }

    private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
    {
        var item = sender as MenuFlyoutItem;
        var deviceName = item.Tag;

        //TO DO SOMETHING
    }
}

enter image description here

0 голосов
/ 15 октября 2018

Вы можете обратиться к следующему коду.Я не нашел способа использования Binding или x: Bind , но мы можем добавить MenuFlyoutItem в MenuFlyout вручную после десериализации данных json.

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var deviceList = JsonConvert.DeserializeObject<List<DeviceInfo>>(jsonData);
        var menuFlyout = new MenuFlyout();
        foreach (var device in deviceList)
        {
            var menuFlyoutItem = new MenuFlyoutItem() { Name = device.DeviceName, Text = device.DeviceName };
            menuFlyoutItem.Tag = device.DeviceName;
            menuFlyoutItem.Click += MenuFlyoutItem_Click;
            menuFlyout.Items.Add(menuFlyoutItem);
        }

        ButtonCreateDevice.Flyout = menuFlyout;
    }

    private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
    {
        var item = sender as MenuFlyoutItem;
        var deviceName = item.DeviceName;

        //TO DO SOMETHING
    }

Класс DeviceInfo определен как:

    class DeviceInfo
    {
        public string DeviceName { get; set; }
        public string Status { get; set; };
    }

Протестировано с данными примера ( jsonData ) как:

[{"DeviceName":"LED-1","Status":"Connected"},{"DeviceName":"LED-2","Status":"Connected"},{"DeviceName":"LED-3","Status":"Connected"}]

enter image description here

...