gpt4 book ai didi

c# - 如何在 Xamarin.Forms 的 ListView 中绑定(bind)列表

转载 作者:可可西里 更新时间:2023-11-01 07:57:22 25 4
gpt4 key购买 nike

我的页面上有一个 ListView ItemSource作为List<AssetModel>如下图:

public class AssetModel
{
public string AssetId { get; set; }
public string Description { get; set; }

public List<TaskDetail> TaskDetailList { get; set; }
}

public class TaskDetail
{
public string Description { get; set; }
}

如何绑定(bind) TaskDetail在我的 parent 列表中列出?

所需的布局:

enter image description here

最佳答案

这似乎是一个经典的分组 ListView 用例。 James Montemagno wrote an article about this kind of need that should help you a lot .

总而言之,分组功能需要一个“List of List”类型的对象 (IEnumerable<IEnumerable<>>),其中每个“master item”都是“detail item”的列表。

为方便起见,您可以使用上述文章中提供的类:

public class Grouping<K, T> : ObservableCollection<T>
{
public K Key { get; private set; }

public Grouping(K key, IEnumerable<T> items)
{
Key = key;
foreach (var item in items)
this.Items.Add(item);
}
}

然后,您必须将其类型更改为列表属性,例如:

ObservableCollection<Grouping<AssetModel, TaskDetail>> AssetsList { get; set; } = 
new ObservableCollection<Grouping<AssetModel, TaskDetail>>();

AssetsList是您应该绑定(bind)到 ItemsSource 的内容的 ListView

要填充此属性,您需要执行以下操作:

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<TaskDetail>();

for (int j = 0; j < 3; j++)
asset.TaskDetailList.Add(new TaskDetail() { Description = $"Detail { (i + 1) } - { (j + 1) }" });

var group = new Grouping<AssetModel, TaskDetail>(asset, asset.TaskDetailList);

AssetsList.Add(group);
}

然后在 XAML 中定义 ListView 分组属性:

<ListView ItemsSource="{Binding AssetsList}" 
HasUnevenRows="True"
SeparatorVisibility="None"
SeparatorColor="Transparent"
IsGroupingEnabled="True">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="AssetId"
FontAttributes="Bold"/>
<Label Text={Binding Key.AssetId}/>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Description"
FontAttributes="Bold"/>
<Label Text={Binding Key.Description}/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text={Binding Description}/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

关于c# - 如何在 Xamarin.Forms 的 ListView 中绑定(bind)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48988751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com