在 Xamarin 表单中将 Observable 集合绑定到我的 ListView 时遇到问题

Posted

技术标签:

【中文标题】在 Xamarin 表单中将 Observable 集合绑定到我的 ListView 时遇到问题【英文标题】:Having trouble binding an Observable collection to my ListView in Xamarin Forms 【发布时间】:2020-01-22 08:54:24 【问题描述】:

我对 Xamarin Forms 非常陌生,我正在尝试将我的 Observable 集合“DisplayItems”绑定到我的列表视图,但我无法弄清楚如何做到这一点并且能够将名称显示到该项目。我可以得到listview.ItemsSource = DisplayItems,但是当我这样做时,我不知道如何在列表视图中显示标签以获取项目的名称。任何帮助将不胜感激。

    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ComponentModel
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;


    namespace ShoppingList
    
        [XamlCompilation(XamlCompilationOptions.Compile)]
        public partial class Page1 : ContentPage
        

            public ObservableCollection<Item> DisplayItems;

            public Page1()
            
                InitializeComponent();

                DisplayItems = new ObservableCollection<Item>();

                DisplayItems.Add(new Item("potato", 3.40, 3, false));
                DisplayItems.Add(new Item("juice", 4.70, 5, true));


                BindingContext = this;

            


        
    

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="ShoppingList.Page1"
                 Title ="ViewPage">
        <ContentPage.Content>
            <StackLayout>

                <ListView x:Name="listview"  ItemsSource="Binding DisplayItems" HasUnevenRows="True" HorizontalOptions="Fill" VerticalOptions="Fill" >
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell x:Name="viewcell">
                                <StackLayout>
                                    <Label x:Name="ListCell" Text="Binding name"/>
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>


            </StackLayout>
        </ContentPage.Content>
    </ContentPage>

【问题讨论】:

Item 是否有一个名为 name 的公共 属性 是的,它是公共财产。 你知道字段和属性的区别吗?您刚刚发布和删除的代码不是公共财产 DisplayItems 也需要是公共属性 好的,我把它们变成了公共属性,现在一切正常,感谢您的快速帮助:) 【参考方案1】:

查看有关为 ListView 设置模型数据的文档。 Data Binding in ListView.

你应该定义 Item 类如下:

public class Item 

    public string name get; set;

然后在 ContentPage 添加一些数据 DisplayItems

namespace ShoppingList

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Page1 : ContentPage
    

        public ObservableCollection<Item> DisplayItems;

        public Page1()
        
            InitializeComponent();

            DisplayItems = new ObservableCollection<Item>();

            DisplayItems .Add(new Item name="Rob Finnerty");
            DisplayItems .Add(new Item name="Bill Wrestler");

            BindingContext = this;
        

    

最后在 Xaml 中这可以工作:

<ListView x:Name="listview"  ItemsSource="Binding DisplayItems" HasUnevenRows="True" HorizontalOptions="Fill" VerticalOptions="Fill" >
      <ListView.ItemTemplate>
           <DataTemplate>
               <ViewCell x:Name="viewcell">
                    <StackLayout>
                           <Label x:Name="ListCell" Text="Binding name"/>
                    </StackLayout>
                </ViewCell>
           </DataTemplate>
      </ListView.ItemTemplate>
  </ListView>

【讨论】:

以上是关于在 Xamarin 表单中将 Observable 集合绑定到我的 ListView 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单中将数组绑定到 ListView

在基于 Xamarin 表单的应用程序中将数据从 android 服务传递到 ContentPage

如何在xamarin表单中动态保存文件

在 Xamarin 表单中使用效果的 Android 工具栏中心

Xamarin 表单从另一个视图获取数据

Xamarin Forms ListView 绑定到 Observable 集合中的子对象列表