如何在Xamarin.Forms中绑定ListView中的列表
我的页面上有一个ListView, ItemSource
为List
,如下所示:
public class AssetModel { public string AssetId { get; set; } public string Description { get; set; } public List TaskDetailList { get; set; } } public class TaskDetail { public string Description { get; set; } }
如何在父列表中绑定TaskDetail
列表?
期望的布局:
它似乎是一个经典的分组listview用例。 詹姆斯·蒙特马尼奥(James Montemagno)写了一篇关于这种需求的文章应该对你有很大帮助 。
总之,分组function需要“列表列表”类型的对象( IEnumerable
),其中每个“主项目”是“详细项目”的列表。
为方便起见,您可以使用上述文章中提供的类:
public class Grouping : ObservableCollection { public K Key { get; private set; } public Grouping(K key, IEnumerable items) { Key = key; foreach (var item in items) this.Items.Add(item); } }
然后,list属性必须将其类型更改为,例如:
ObservableCollection> AssetsList { get; set; } = new ObservableCollection>();
这个AssetsList
是你应该绑定到ListView
的ItemsSource
的
要填写此属性,您需要执行以下操作:
for (int i = 0; i < 5; i++) { var asset = new AssetModel(); asset.AssetId = new Guid().ToString(); asset.Description = $"Asset { i + 1} "; asset.TaskDetailList = new List(); for (int j = 0; j < 3; j++) asset.TaskDetailList.Add(new TaskDetail() { Description = $"Detail { (i + 1) } - { (j + 1) }" }); var group = new Grouping(asset, asset.TaskDetailList); AssetsList.Add(group); }
然后在您的XAML中定义ListView分组属性: