0
votes

I have a custom control, basically a stacklayout that I can bind a concatenated string, and have this break up into multiple objects, like a tag list.

public void Render()
        {
            if (ItemsSource == null)
                return;

            this.Orientation = Orientation == StackOrientation.Vertical ? StackOrientation.Vertical : StackOrientation.Horizontal;
            this.Margin = new Thickness (0, 0, 0, 0);

            List<string> items = ItemsSource.Split('|').ToList();
            foreach (var item in items)
            {
                var frame = new Frame();
                frame.BindingContext = item;
                frame.BackgroundColor = Color.FromHex("#FCFACF");
                frame.OutlineColor = Color.FromHex("#D0C0AD");
                frame.HasShadow = false;
                frame.Padding = new Thickness(4, 2, 4, 0);
                var label = new Label();
                label.Text = "{Binding}";
                label.FontSize = 10;
                label.Parent = frame;
                Children.Add(frame);
            }
        }

but I can't seem to get this right, how do I add a lable to be a child of a frame, and how can I fix my binding, as at present if I add the label to the children of the stacklayout the text of the labels is {binding} and not the actual text.

Can someone please help me with this. I had all of this working if I added a ItemTemplate with a datatemplate and viewcell in the XAML, but I don't want this done in XAML as I'd like to reuse all of this in other views.

1

1 Answers

0
votes

Frame has Content property

Frame.Content = label;

To assign a binding in code, use

label.SetBinding(Label.TextProperty, new Binding("."));