С iOS и Android я могу создавать прокручиваемые списки, привязанные к списку, где каждая строка может иметь разные элементы управления. Как это сделать с помощью Xamarin.Forms? Из того, что я могу сказать, элемент управления ListView принимает только один шаблон, и при создании каждой строки нет перегрузки или обратного вызова, в котором я могу изменить элементы управления (что я могу сделать с iOS и Android).
Xamarin.Forms ListView с разными элементами управления для каждой строки?
Ответы (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);
Простой способ — использовать конвертер и отображать/скрывать нужный контент для каждой ячейки.
Вы можете привязать элемент к видимости сетки, посередине вы используете конвертер, чтобы проверить, хотите ли вы показать или скрыть сетку в зависимости от элемента.
это возможный обходной путь.
Я надеюсь, что команды Xamarin Forms добавят ContentView, к которому можно будет привязать свое представление в будущем, или предложат CellTemplateSelector в ячейках.
Насколько отличаются ваши ряды?
Если они сильно отличаются, вам нужно будет создать собственный модуль рендеринга ячеек и, возможно, пользовательский список и рендерер для него.
Если строки не так уж отличаются, вы можете попробовать использовать расширенный набор элементов управления и скрыть те, которые вам не нужны, на основе привязок элементов - для этого, вероятно, потребуется добавить дополнительные поля в модель представления вашей ячейки.
Вы также можете попробовать Scrollview со StackLayout внутри - определенно не родной l & f, поэтому в зависимости от вашей цели это может не применяться.