La placa de datos de Xamarin con enlaces en el código detrás no funciona

He intentado hacer una página en mi aplicación donde todos los controles se generan dinámicamente a través del código C # detrás. Estoy utilizando un paquete de DLToolkit, flowlist lista de flujo para crear una lista de flujo.

Ya he usado este paquete en mi proyecto antes de usar Xaml , y funciona completamente. Sin embargo, cuando bash crear una datatemplate de datatemplate en el código que está detrás, solo muestra un control en blanco; sin embargo, al pasar el cursor por encima de este control, puedes ver que hay elementos en él.

Mi pregunta es: ¿Cómo puedo hacer una placa de datos con enlaces de datos en código detrás?

Aquí hay un ejemplo y funciona en Xaml :

            

Sin embargo, en este proyecto se generan los controles, por lo que no hay ningún código Xaml involucrado. Este es un ejemplo del código que he probado en el código detrás, pero no funciona:

 #region Datatemplate var dataTemplate = new DataTemplate(() => { var StackLayout = new StackLayout { BackgroundColor = Color.Pink, Padding = 2, HorizontalOptions = LayoutOptions.FillAndExpand }; #region children/content for frame AbsoluteLayout absoluteLayout = new AbsoluteLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand }; #region content for AbsoluteLayout var imgBg = new Image(); AbsoluteLayout.SetLayoutBounds(imgBg , new Rectangle(1, 1, 1, 1)); AbsoluteLayout.SetLayoutFlags(imgBg , AbsoluteLayoutFlags.All); imgBg .SetBinding(Image.SourceProperty, "BgImage"); absoluteLayout.Children.Add(imgBg ); var overlayBox = new BoxView { Color = Color.Black, Opacity = 0.5 }; AbsoluteLayout.SetLayoutBounds(overlayBox, new Rectangle(1, 1, 1, 1)); AbsoluteLayout.SetLayoutFlags(overlayBox, AbsoluteLayoutFlags.All); absoluteLayout.Children.Add(overlayBox); #region InnerStackpanel StackLayout innerStackVoorAbsoluteLayout = new StackLayout { Margin = new Thickness(20), VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand }; var lblTitel = new Label { FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), TextColor = Color.White }; var lblSubTitel = new Label { FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), TextColor = Color.White }; //Bindings lblTitel.SetBinding(Label.TextProperty, "Title"); lblSubTitel.SetBinding(Label.TextProperty, "SubTitle"); innerStackVoorAbsoluteLayout.Children.Add(lblSubTitel); innerStackVoorAbsoluteLayout.Children.Add(lblTitel); absoluteLayout.Children.Add(innerStackVoorAbsoluteLayout); #endregion #endregion #endregion Frame frame = new Frame(); frame.Content = absoluteLayout; StackLayout.Children.Add(frame); return StackLayout; }); #endregion FlowListView lstRelatieLijst = new FlowListView(); lstRelatieLijst.ItemsSource = lstRelatieItems; lstRelatieLijst.FlowColumnTemplate = dataTemplate; lstRelatieLijst.BackgroundColor = Color.LightGoldenrodYellow; lstRelatieLijst.FlowColumnCount = 1; lstRelatieLijst.HasUnevenRows = true; #endregion 

¿Alguien me puede dar algún consejo sobre cómo puedo convertirme en algo similar al Xaml superior en el código que hay detrás, por favor?

Ya probé las siguientes fonts, pero desafortunadamente no funcioné como se esperaba. Esperaba ver el mismo resultado o algo similar como el código XAML. Pero después de seguir su información, el FLowListView parece estar vacío:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/creating

https://www.codeproject.com/Questions/516614/createplusdatatemplatepluscodeplusbehind

Deberías usar

flowList.SetBinding(FlowListView.FlowItemsSourceProperty, "List"); en lugar de ItemsSource

Aquí está la muestra de trabajo …

 using DLToolkit.Forms.Controls; using System; using Xamarin.Forms; namespace FlowListTest { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); LoadUI(); BindingContext = new BContext(); } private void LoadUI() { var dataTemplate = new DataTemplate(() => { var image = new Image(); image.SetBinding(Image.SourceProperty, "BgImage"); var titleLabel = new Label { FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), TextColor = Color.White, }; titleLabel.SetBinding(Label.TextProperty, "Title"); var subTitleLabel = new Label { FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), TextColor = Color.White, }; subTitleLabel.SetBinding(Label.TextProperty, "Subtitle"); return new StackLayout { BackgroundColor = Color.Pink, Padding = 2, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { new Frame { Content = new AbsoluteLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, Children = { image, new StackLayout { Margin = new Thickness(20), VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, Children = { titleLabel, subTitleLabel } } } } } } }; }); var flowList = new FlowListView(); flowList.SetBinding(FlowListView.FlowItemsSourceProperty, "List"); flowList.FlowColumnTemplate = dataTemplate; flowList.BackgroundColor = Color.LightGoldenrodYellow; flowList.FlowColumnCount = 1; flowList.HasUnevenRows = true; var button = new Button { Text = "Add" }; button.Clicked += Button_Clicked ; Content = new StackLayout { Children = { button, flowList } }; } private void Button_Clicked(object sender, EventArgs e) { (BindingContext as BContext).Add(); } } public class Foo { public string BgImage { get; set; } public string Title { get; set; } public string Subtitle { get; set; } } public class BContext { public FlowObservableCollection List { get; set; } public BContext() { List = new FlowObservableCollection { new Foo { BgImage = "http://via.placeholder.com/350x150", Title = "Title", Subtitle = "SubTitle" }, new Foo { BgImage = "http://via.placeholder.com/350x150", Title = "Title1", Subtitle = "SubTitle1" } }; } public void Add() { List.Add(new Foo { BgImage = "http://via.placeholder.com/350x150", Title = "Title" + List.Count, Subtitle = "SubTitle" + List.Count }); } } }