简体   繁体   中英

Xamarin Forms Binding Object with List in property

I have the following class in my project

  public class ListagemVideos
    {

        public int codplaylist { get; set; }
        public string titulo { get; set; }
        public string url { get; set; }
        public string descricao { get; set; }

    }

    public class PlayList
    {
        public int codplaylist { get; set; }
        public string playlist { get; set; }
        public string descricao { get; set; }
        public ObservableCollection<ListagemVideos> videos { get; set; } = new ObservableCollection<ListagemVideos>();
    }

My XAML file

 <AbsoluteLayout BackgroundColor="White" VerticalOptions="FillAndExpand">
                <CollectionView ItemsSource="{Binding ListaVideosCursos}">
                    <CollectionView.ItemTemplate>
                        <DataTemplate>
                            <StackLayout>
                                <Label
                                    FontFamily="titibold"
                                    FontSize="40"
                                    Text="{Binding playlist}" />
                                <Label
                                    FontFamily="titiregular"
                                    FontSize="20"
                                    Text="{Binding descricao}" />
                                <ScrollView Orientation="Horizontal">
                                    <StackLayout Margin="10">
                                        <Label
                                            x:Name="lblvideorecente"
                                            FontFamily="titiregular"
                                            FontSize="20"
                                            Text="{Binding videos.titulo}" />
                                    </StackLayout>
                                </ScrollView>
                            </StackLayout>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>
            </AbsoluteLayout>

ListaVideosCursos is the name of the ObservableCollection that receives the object's data, well my question and that of many from what I've seen around is how to bind the properties of the List video object (titulo, url, descricao) to my collectionview?

You need to set the source videos for the StackLayout to help Label to find the value of titulo property.

You could refer to the code below.

Xaml:

 <AbsoluteLayout BackgroundColor="White" VerticalOptions="FillAndExpand">
    <CollectionView ItemsSource="{Binding playLists}">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Label
                                FontFamily="titibold"
                                FontSize="40"
                                Text="{Binding playlist}" />
                    <Label
                                FontFamily="titiregular"
                                FontSize="20"
                                Text="{Binding descricao}" />
                    <ScrollView Orientation="Horizontal">
                        <StackLayout Margin="10" BindableLayout.ItemsSource="{Binding videos}">
                            <BindableLayout.ItemTemplate>
                                <DataTemplate>
                                    <Label
                                        x:Name="lblvideorecente"
                                        FontFamily="titiregular"
                                        FontSize="20"
                                        Text="{Binding  titulo}" />
                                </DataTemplate>
                            </BindableLayout.ItemTemplate>
                            
                        </StackLayout>
                    </ScrollView>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</AbsoluteLayout>

Code behind:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        this.BindingContext = new ListagemVideosViewModel();

    }
}
public class ListagemVideosViewModel
{
    public ObservableCollection<PlayList> playLists { get; set; }
    public ListagemVideosViewModel()
    {
        playLists = new ObservableCollection<PlayList>()
        {
            new PlayList(){ codplaylist=1, descricao="A", playlist="aa", videos=new ObservableCollection<ListagemVideos>(){ new ListagemVideos() {  codplaylist=1, descricao="A2", titulo= "a_titulo", url= "A_url" } }},
            new PlayList(){ codplaylist=2, descricao="B", playlist="bb", videos=new ObservableCollection<ListagemVideos>(){ new ListagemVideos() {  codplaylist=2, descricao="B2", titulo= "b_titulo", url= "B_url" } }}

        };
    }
}
public class ListagemVideos
{

    public int codplaylist { get; set; }
    public string titulo { get; set; }
    public string url { get; set; }
    public string descricao { get; set; }

}

public class PlayList
{
    public int codplaylist { get; set; }
    public string playlist { get; set; }
    public string descricao { get; set; }
    public ObservableCollection<ListagemVideos> videos { get; set; } = new ObservableCollection<ListagemVideos>();
}

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM