【问题标题】:Xamarin.Forms Working with ListView from existing List of objectsXamarin.Forms 使用现有对象列表中的 ListView
【发布时间】:2019-10-26 04:26:47
【问题描述】:

我正在使用 Xamarin.Forms,我正在尝试从我的模型的 c# 列表创建一个 ListView,这就是我尝试过的......我创建了这个视图

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

我尝试像这样设置 ItemSource:

List<UserClass> users = new List<UserClass>();

            users = webService.getScannedLog();

            BindingContext = this;
            lst.ItemsSource = users;

但是当我这样做时,我得到了这个错误:

对象引用未设置为对象的实例

我做错了什么?

【问题讨论】:

  • 我很想知道您对我的第二个帖子/回答您的问题有何看法(另外,如果这些答案中的任何一个解决了您的问题,请不要忘记将其标记为答案,以便反映在提要中)

标签: c# xamarin.forms


【解决方案1】:

您必须为 ItemsSource 设置绑定:

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

在后面的代码中:

List<UserClass> users = new List<UserClass>();

            users = webService.getScannedLog();

            BindingContext = users;

请注意,ItemsSource 绑定是在 XAML 中设置的。

【讨论】:

  • 如何知道使用用户列表?
  • 我编辑了我的答案。如果您仍有疑问,请告诉我。
  • 我的荣幸!请不要忘记将此帖子设置为答案;)
  • 没有理由不能直接在代码中设置ItemsSource
  • @Jason,没有人说“你不能直接在代码中设置 ItemsSource”。我只是使用了我自己的风格,并在我的帖子中通过告诉 user979331 “注意 ItemsSource 绑定是在 XAML 中设置的”来指出这一点。
【解决方案2】:

受到@Jason 在我对这篇文章的第一个回答的评论的启发,我很想知道他说的是否正确:

没有理由不能直接在代码中设置 ItemsSource

经过一番研究,我发现正如他所指出的,我的答案中的代码与 OP 的代码基本相同。但是......那么我的回答如何帮助 OP 解决问题?

好吧,我能得到例外的唯一方法

对象引用未设置为对象的实例

使用原帖中的代码是如果贴出的c#代码是在调用InitializeComponent()之前调用的,也就是说,如果后面的代码是这样的:

public MainPage()
{

    List<UserClass> users = new List<UserClass>();

    users = webService.getScannedLog();

    BindingContext = this;
    lst.ItemsSource = users;

    InitializeComponent();

}

在这种情况下,lst 在被InitializeComponent() 创建之前就被调用了。 在这种情况下,我的回答通过删除 lst 引用并直接在 XAML 中设置 ItemsSource 解决了这个问题。

如果是这样的话,那么我想说,要解决这个问题,在调用InitializeComponent() 之后移动ItemsSource 的设置就足够了,在这种情况下,代码看起来会有所不同喜欢:

public MainPage()
{

    InitializeComponent();    

    List<UserClass> users = new List<UserClass>();

    users = webService.getScannedLog();

    BindingContext = this;
    lst.ItemsSource = users;

}

@user979331,如果是这种情况,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多