Xamarin形式CarouselView.ItemsSource无法使用绑定

问题描述 投票:0回答:1

在使用Xamarin Forms CarouselView的简单示例中,我尝试将ItemsSourceBinding设置为公共对象(获取属性),但是它不起作用。显示CarouselView,但没有任何数据可查看。下面是我的Xaml和代码隐藏的代码:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="CVApp.OtherPage">
    <ContentPage.Content>
        <StackLayout>
            <CarouselView x:Name="_carouselView" ItemsSource="{Binding Stuffs}">
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <StackLayout>
                            <Frame
                               BorderColor="DarkGray"
                               CornerRadius="5"
                               Margin="20"
                               HeightRequest="50"
                               HorizontalOptions="Center"
                               VerticalOptions="CenterAndExpand">
                                <StackLayout>
                                    <Label Text="{Binding Text}" />
                                </StackLayout>
                            </Frame>
                        </StackLayout>
                    </DataTemplate>
                </CarouselView.ItemTemplate>
            </CarouselView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace CVApp
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class OtherPage : ContentPage
    {
        private List<Stuff> _stuffs;

        public List<Stuff> Stuffs
        {
            get
            {
                return this._stuffs;
            }
        }

        public OtherPage()
        {
            InitializeComponent();

            _stuffs = new List<Stuff>();

            for (int i = 0; i < 10; i++)
            {
                _stuffs.Add(new Stuff(i));
            }
        }
    }

    public class Stuff
    {
        public string Text { get; set; }

        public Stuff(int i)
        {
            this.Text = i.ToString();
        }
    }
}

但是,如果我只是从Xaml代码中删除ItemsSource="{Binding Stuffs}",而是直接在后面的代码中设置ItemsSource,它会很好地工作(请参见下面的代码)。谁能给我有关我的绑定代码出什么问题的建议吗?

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="CVApp.OtherPage">
    <ContentPage.Content>
        <StackLayout>
            <CarouselView x:Name="_carouselView" ItemsSource="{Binding Stuffs}">
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <StackLayout>
                            <Frame
                               BorderColor="DarkGray"
                               CornerRadius="5"
                               Margin="20"
                               HeightRequest="50"
                               HorizontalOptions="Center"
                               VerticalOptions="CenterAndExpand">
                                <StackLayout>
                                    <Label Text="{Binding Text}" />
                                </StackLayout>
                            </Frame>
                        </StackLayout>
                    </DataTemplate>
                </CarouselView.ItemTemplate>
            </CarouselView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace CVApp
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class OtherPage : ContentPage
    {
        private List<Stuff> _stuffs;

        public List<Stuff> Stuffs
        {
            get
            {
                return this._stuffs;
            }
        }

        public OtherPage()
        {
            InitializeComponent();

            _stuffs = new List<Stuff>();

            for (int i = 0; i < 10; i++)
            {
                _stuffs.Add(new Stuff(i));
            }

            this._carouselView.ItemsSource = this._stuffs;
        }
    }

    public class Stuff
    {
        public string Text { get; set; }

        public Stuff(int i)
        {
            this.Text = i.ToString();
        }
    }
}
xamarin.forms data-binding itemssource
1个回答
0
投票

您应该在页面的构造函数中添加BindingContext = this;

这里是代码。

    public partial class MainPage : ContentPage
{
    private List<Stuff> _stuffs;
    public List<Stuff> Stuffs
    {
        get
        {
            return _stuffs;
        }
    }




    public MainPage()
    {
        InitializeComponent();

        _stuffs = new List<Stuff>();

        for (int i = 0; i < 10; i++)
        {
            _stuffs.Add(new Stuff(i));
        }
        BindingContext = this;

    }

    public class Stuff
    {
        public string Text { get; set; }

        public Stuff(int i)
        {
            this.Text = i.ToString();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.