我是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
欢迎任何其他建议
修改
我创建了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>
答案 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>
试试这段代码。