【问题标题】:Can't binding ObservableCollection to ListView on Xamarin Form无法将 ObservableCollection 绑定到 Xamarin 表单上的 ListView
【发布时间】:2017-08-10 14:15:01
【问题描述】:

所以我遇到了一个绑定项目到列表视图的问题

初始化页面

public HomePage()
    {
        Acquaintances = Add();
        //InitializeToolbar();
        InitializeComponent();

    }
private ObservableCollection<Acquaintance> Add()
    {
        return new ObservableCollection<Acquaintance>()
        {

         new Acquaintance(){.....}

在 XAML 上

<ListView x:Name="lstUser" BackgroundColor="White" ItemsSource="{Binding Acquaintances}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>

                        <Grid Grid.Column="0">
                            <ImageCell ImageSource="{Binding PhotoUrl}" Height="50"></ImageCell>

                        </Grid>

                        <StackLayout Grid.Column="1" Padding="5">
                            <Label Text="{Binding FirstName}" FontSize="15" TextColor="Black"></Label>
                            <Label Text="{Binding City}" FontSize="10" TextColor="Black"></Label>
                            <Label Text="{Binding JobTitle}" FontSize="10" TextColor="#CCCCCC"></Label>
                        </StackLayout>

                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

ListView 不能将熟人绑定到 ListView 的项目源。哪里错了???

在页面中:

public ObservableCollection<Acquaintance> Acquaintances { get; }

【问题讨论】:

  • 你设置了BindingContext了吗?
  • 是的,我试过了。
  • BindingContext = 熟人;
  • 如果你设置了 BindingContext = Acquaintances,那么你的绑定表达式应该是 ItemsSource="{Binding .}"

标签: c# listview xamarin xamarin.forms


【解决方案1】:

您似乎忘记在页面上设置BindingContext 属性。如果不设置该属性,页面将不知道从哪里获取数据。

要将上下文设置为自身,请执行以下操作:

public HomePage()
{
    Acquaintances = Add();
    //InitializeToolbar();
    InitializeComponent();

    BindingContext = this; // Note that I added this line
}

在 cmets 中,您问为什么设置 BindingContext = Acquaintances; 时它会失败,以及为什么设置 BindingContext = this; 时它会起作用。

很简单,将BindingContext 设置为包含您要访问的属性的对象。通过将上下文设置为this,在本例中为HomePage,您可以使用诸如{Binding Acquaintances} 之类的绑定。因为AcquaintancesHomePage 的属性。

如果您将BindingContext 设置为特定属性(也可以是复杂类型,但并非必须如此),则可以更改范围。因此,当您将BindingContext 设置为Acquaintances 时,您必须将列表中的ItemsSource 更改为{Binding .}。点表示它将使用BindingContext 本身中的对象,而不是其中的属性。

【讨论】:

  • BindingContext = 熟人; => 失败 BindingContext = this; => 成功 为什么?
  • 更新了答案,我希望它能为你澄清一点。如果有帮助请不要忘记接受。
猜你喜欢
  • 2018-05-10
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2012-05-26
  • 2018-05-21
相关资源
最近更新 更多