Xamarin.Forms ListView每行有不同的控件?

时间:2014-07-28 13:52:22

标签: c# listview xamarin.forms

使用iOS和Android,我可以创建可滚动列表视图,绑定到列表,其中每行可以有不同的控件。我如何使用Xamarin.Forms做到这一点?据我所知,ListView控件只占用一个模板,并且在创建每一行时都没有重载或回调,我可以更改控件(这是我可以用iOS和Android做的)。

3 个答案:

答案 0 :(得分:2)

您可以使用TableView。在TableView中,每行指定每个自定义ViewCell,但是丢失了ListView的项选择处理程序。例如:

        var table = new TableView {
            Intent = TableIntent.Settings,
            Root = new TableRoot("Table Name"),
            HasUnevenRows = true,
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            BackgroundColor = Color.Transparent
        };

        var section = new TableSection ();

        //dataList in my case is the list of elements that populate each row
        dataList.ForEach (e => {
            //Add custom Cells to the TableSection
            section.Add(new ContactCardCell{BindingContext = e});
        });

        table.Root.Add (section);

答案 1 :(得分:1)

一种简单的方法是使用转换器并显示/隐藏每个单元格所需的内容。

您可以将项目绑定到网格的可见性,在中间使用转换器来检查是否要根据项目显示或隐藏网格。

这是可能的解决方法。

我希望Xamarin Forms团队添加一个ContentView,可以将其视图绑定到将来或在单元格中提供CellTemplateSelector。

答案 2 :(得分:0)

你的行有多不同?

如果它们非常不同,您需要制作自定义单元格渲染器,并且可能需要自定义列表视图和渲染器。

如果行没有那么不同,你可能想尝试使用控件的超集并根据项绑定隐藏你不需要的那些 - 这可能需要你在你的单元的viewmodel中添加额外的字段< / p>

您可能还想尝试在内部使用StackLayout的Scrollview - 绝对不是原生的l&amp; f,这取决于您的目标,这可能不适用。