使用HttpResponseMessage的json响应创建类似结构的嵌套树视图

时间:2019-05-29 15:51:57

标签: c# xamarin xamarin.forms

我正在创建一个Xamarin Forms跨平台应用程序。

我从Flask服务接收到json响应。我希望能够创建一个树状结构,以便在json响应中显示嵌套的“键”,并将“值”存储在json文件中。

json文件可能具有嵌套在许多级别上的条目,我希望能够提出通用解决方案。

我尝试使用JsonConvert.DeserializeObject<FSTDInfo>(JsonContent);,但遇到一个问题,因为我要通过绑定到“ BGColor”来更新每个“ ItemName”的颜色。此“ BGColor”由每个“键”值字段中的“ taskstatus”字段定义。例如,如果状态为1,则“团队”文本的颜色将为红色。

因此,我不确定如何在xaml文件中指定绑定。 我已经做了类似的事情,但是在嵌套层次上将无法正常工作?

sfTreeView:SfTreeView x:Name="treeView"                             
                              ItemsSource="{Binding Menu}">
            <sfTreeView:SfTreeView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.View>
                            <Grid x:Name="grid" RowSpacing="0" BackgroundColor="Transparent">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="1" />
                                </Grid.RowDefinitions>
                                <Grid RowSpacing="0" Grid.Row="0">
                                    <Grid Grid.Column="0"
                                              RowSpacing="1"
                                              Padding="1,0,0,0"
                                              VerticalOptions="Center">
                                        <Label LineBreakMode="NoWrap"
                                               Text="{Binding ItemName}"
                                               BackgroundColor="{Binding BGColor}"
                                               VerticalTextAlignment="Center" />
                                    </Grid>
                                </Grid>
                                <StackLayout Grid.Row="1" HeightRequest="1"/>
                            </Grid>
                        </ViewCell.View>
                    </ViewCell>
                </DataTemplate>
            </sfTreeView:SfTreeView.ItemTemplate>
        </sfTreeView:SfTreeView>

目前,这就是我所拥有的。

 public async void GetJsonDataAsync(string uri)
        {
            try
            {
                HttpResponseMessage response = await _client.GetAsync(uri);
                if (response.IsSuccessStatusCode)
                {
                    string JsonContent = await response.Content.ReadAsStringAsync();
                    //data = JsonConvert.DeserializeObject<FSTDInfo>(JsonContent);

                }
            }

我的JSON结构如下:

json_temp = {
        "TASKS":
         {            
                'taskid': '10',
                'taskstatus': 'in progress',

                'Kitchen': 
                {                    
                    'Stove':{
                                'LED1':
                                {
                                'taskid': '11',
                                'taskstatus':'running'
                                },

                                'LED2':
                                {
                                    'taskid': '12',
                                    'taskstatus':'off',
                                    'LEDSub':
                                    { 
                                       'taskid': '13',
                                       'taskstatus':'stable',
                                       'LEDSub2':
                                        {
                                           'taskid': '14',
                                           'taskstatus':'burnt'
                                        }
                                    }
                                },

                                'LED3':
                                {
                                'taskid': '15',
                                'taskstatus':'new'
                                } 
                           },
                  //other nested layers
               }
        }

我知道我可以从json结构创建c#类,但是我不想做的事情。我希望能够创建一个像这样的treeview结构:因此,当我们选择Tasks时,我们将基于下面显示的结构获得一个下拉嵌套列表。

>TASKS
  >Kitchen
    >Stove
      LED1
      LED2
      LED3
....

我真的不知道该怎么做。我正在Xamarin Forms中使用SFtreeview创建树视图。我还尝试了JSON解析方法,该方法可以提取json中的键,但是不起作用。

我希望能够从json对象创建树形视图。我不确定该怎么做。我想为“ taskid”和“ taskstatus”字段创建一个类,因为它们对于所有键都是相同的,并使用绑定将每个树视图节点文本(json的键)的“背景色”绑定到其“状态”字段。

我将不胜感激。我真的迷路了。

0 个答案:

没有答案