如何在xamarin表单中的嵌套listview中添加2个列表

时间:2018-05-24 12:00:52

标签: listview xamarin.forms

我是xamarin froms的新手。我需要在一个listview.i中绑定2个列表从webservice获取数据集(共3个数据表)。我已尝试在listview中实现嵌套列表视图,即listview。我给他们的名字,但当我试图访问内部listview代码后面没有提起(我知道原因)。我已经研究过,但我没有得到任何相关的文章。这是我实施的。基本上,我正在尝试建立一个调查/测试应用程序。

IEnumerable<StartParticularSurvey> _questionList;
IEnumerable<StartParticularSurvey> _answerList;

var response = e.Result.ToString();
var result = StartParticularSurvey.FromJson(response);
            if (result[0][0].bit_HasError == true)
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    Navigation.PushAsync(new UserSurveyList());
                    DisplayAlert("Alert!", result[0][0].vchar_ErrorMsg, "Ok");
                });
            }
            else
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    var questionDataset = result[1][0]; //trying to get Table2 in questionDataset
                    var answerDataset = result[2][0]; //trying to get Table3 in answerDataset
                    _questionList = questionDataset as IEnumerable<StartParticularSurvey>;
                    _answerList = answerDataset as IEnumerable<StartParticularSurvey>;
                    lvSurveyQuestion.ItemsSource = _questionList;
                    lvSurveyAnswer.itemSource = _answerList; //Here is where the .cs is not picking up and i know why.
                });
            }  

XAML:

<ListView x:Name="lvSurveyQuestion">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <Label Text="{binding data here}"/>
                                <ListView x:Name="lvSurveyAnswer">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <ViewCell>
                                                <StackLayout>
                                                    <Label Text="{binding data here}"/>
                                                    <Label Text="{binding data here}"/>
                                                </StackLayout>
                                            </ViewCell>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

型号:

namespace IVSConnectMobile.Model
{
    public partial class StartParticularSurvey
    {
        [JsonProperty("bit_HasError", NullValueHandling = NullValueHandling.Ignore)]
        public bool? bit_HasError { get; set; }

        [JsonProperty("vchar_ErrorMsg", NullValueHandling = NullValueHandling.Ignore)]
        public string vchar_ErrorMsg { get; set; }

        [JsonProperty("int_SurveyQuestionID", NullValueHandling = NullValueHandling.Ignore)]
        public long? int_SurveyQuestionID { get; set; }

        [JsonProperty("vchar_Description", NullValueHandling = NullValueHandling.Ignore)]
        public string vchar_Description { get; set; }

        [JsonProperty("vchar_Instruction")]
        public string vchar_Instruction { get; set; }

        [JsonProperty("int_AnswerType", NullValueHandling = NullValueHandling.Ignore)]
        public long? int_AnswerType { get; set; }

        [JsonProperty("vchar_Option", NullValueHandling = NullValueHandling.Ignore)]
        public string vchar_Option { get; set; }
    }

    public partial class StartParticularSurvey
    {
        public static List<List<StartParticularSurvey>> FromJson(string json) => JsonConvert.DeserializeObject<List<List<StartParticularSurvey>>>(json, IVSConnectMobile.Model.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this List<List<StartParticularSurvey>> self) => JsonConvert.SerializeObject(self, IVSConnectMobile.Model.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters = {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

This Image is the result that i am getting after serializing the data

欢迎任何其他建议

This is a sample UI

修改

我创建了2个模型

 public class SurveyAnswerList
    {
        public int int_AnswerType { get; set; }
        public string vchar_Option { get; set; }
    }

public class SurveyQuestionList : List<SurveyAnswerList>
    {
        public string vchar_Description { get; set; }

        public SurveyQuestionList(string description)
        {
            vchar_Description = description;
        }
    }

在代码背后

public List<Model.SurveyQuestionList> _list { get; set; }

_list = new List<Model.SurveyQuestionList>();
                Device.BeginInvokeOnMainThread(() =>
                {
                    for (int i = 0; i < result[1].Count; i++)
                    {
                        for (int j = 0; j < result[2].Count; j++)
                        {
                            if (result[1][i].int_SurveyQuestionID == result[2][j].int_SurveyQuestionID)
                            {
                                _list = new List<SurveyQuestionList>{
                                    new SurveyQuestionList(result[1][i].vchar_Description){
                                        new SurveyAnswerList{ vchar_Option = result[2][j].vchar_Option }
                                    }
                                };
                            }

                        }
                    }
                    lvSurvey.ItemsSource = _list;
                });

XAML:

             <ListView x:Name="lvSurvey"
                      IsGroupingEnabled="True"
                      GroupDisplayBinding="{Binding vchar_Description}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <Label Text="{Binding vchar_Option}"/>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

1 个答案:

答案 0 :(得分:0)

<ListView x:Name="lvSurvey"
                  IsGroupingEnabled="True">
<ListView.GroupHeaderTemplate>
        <DataTemplate>
            <ViewCell>
                <Label Text="{Binding vchar_Description}" />
            </ViewCell>
        </DataTemplate>
    </ListView.GroupHeaderTemplate>


            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Label Text="{Binding vchar_Option}"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

试试这段代码。