Xamarin.Forms ListView с разными элементами управления для каждой строки?

С iOS и Android я могу создавать прокручиваемые списки, привязанные к списку, где каждая строка может иметь разные элементы управления. Как это сделать с помощью Xamarin.Forms? Из того, что я могу сказать, элемент управления ListView принимает только один шаблон, и при создании каждой строки нет перегрузки или обратного вызова, в котором я могу изменить элементы управления (что я могу сделать с iOS и Android).


person Ken K    schedule 28.07.2014    source источник
comment
Если Xamarin.Forms совместим с другими платформами на основе XAML (например, WPF), он должен иметь концепцию неявные шаблоны данных   -  person Federico Berasategui    schedule 28.07.2014
comment
@HighCore, за исключением того, что это не так. Он основан на XAML, но на этом все заканчивается — ни стилей, ни шаблонов.   -  person Sten Petrov    schedule 28.07.2014


Ответы (3)


Вы можете использовать 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);
person Bryan Rodríguez    schedule 03.09.2014

Простой способ — использовать конвертер и отображать/скрывать нужный контент для каждой ячейки.

Вы можете привязать элемент к видимости сетки, посередине вы используете конвертер, чтобы проверить, хотите ли вы показать или скрыть сетку в зависимости от элемента.

это возможный обходной путь.

Я надеюсь, что команды Xamarin Forms добавят ContentView, к которому можно будет привязать свое представление в будущем, или предложат CellTemplateSelector в ячейках.

person Rui Marinho    schedule 29.07.2014
comment
Я не думаю, что конвертер - лучшее решение. Чего я действительно хочу, так это иметь возможность указывать шаблон для каждой строки, а не шаблон для всего списка. Есть ли способ сделать это? - person Ken K; 01.08.2014
comment
Вы правы, это не самое лучшее, но нет, нет способа сделать это прямо сейчас. - person Rui Marinho; 02.08.2014

Насколько отличаются ваши ряды?

Если они сильно отличаются, вам нужно будет создать собственный модуль рендеринга ячеек и, возможно, пользовательский список и рендерер для него.

Если строки не так уж отличаются, вы можете попробовать использовать расширенный набор элементов управления и скрыть те, которые вам не нужны, на основе привязок элементов - для этого, вероятно, потребуется добавить дополнительные поля в модель представления вашей ячейки.

Вы также можете попробовать Scrollview со StackLayout внутри - определенно не родной l & f, поэтому в зависимости от вашей цели это может не применяться.

person Sten Petrov    schedule 28.07.2014