XamarinForms:将自定义类对象的ObservableCollection属性绑定到C#和XAML中的ListView

时间:2018-08-23 08:49:51

标签: c# xamarin xamarin.forms

我有以下课程:

public class NameObject
    {
        public string Name { get; set; }
        public bool Suggested { get; set; }
        public bool Popular { get; set; }
        public string Gender { get; set; }
        public short Personality { get; set; }
        public short Decade { get; set; }
        public string Origin { get; set; }
        public string Diminutives { get; set; }
        public string ShortMeaning { get; set; }
        public string LongMeaning { get; set; }
    }

我在MainPage类中的ObservableCollection中填充了该对象的大约500个条目。由于标签导航需要填充ListView,因此我有另一个课程。

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="engME.YourFullNamesListPage">

    <ListView x:Name="FullNamesList" ItemsSource="">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding ???}"/>
            </DataTemplate>
        </ListView.ItemTemplate>    
    </ListView>
</ContentPage>

我的目标是用每个条目填充此ListView,但仅填充NameList的某些属性。 (姓名,性别,简称)

public partial class YourFullNamesListPage : ContentPage
    {

        public YourFullNamesListPage()
        {
            InitializeComponent();
            FullNamesList.ItemsSource= MainPage.NameList;
        }
    }

在此先感谢您的帮助!我已经尝试了大约9个小时,但仍在学习中,但未成功。

1 个答案:

答案 0 :(得分:3)

Cell的范围为NameObject类的一个实例。

您应该能够做到这一点:

<ListView x:Name="FullNamesList" ItemsSource="">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell Text="{Binding Name}"/>
        </DataTemplate>
    </ListView.ItemTemplate>    
</ListView>

如果要显示更多信息,则需要找到某种方式,在TextCell中,您也可以使用Details。但是,您也可以使用ViewCell构建自己的设计。

例如,像这样:

<ViewCell>
    <StackLayout>
        <Label Text="{Binding Name}"/>
        <Label Text="{Binding Gender}"/>
    </StackLayout>
</ViewCell>

从注释中收集,您已将NameList中的ItemsSource集合声明为成员,而不是属性。为了能够绑定到字段,必须将其声明为公共属性。

更改public static ObservableCollection<NameObject> NameList = new ObservableCollection<NameObject>();

进入

public static ObservableCollection<NameObject> NameList { get; set; } = new ObservableCollection<NameObject>();