在 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