未添加到Observable Collection Xamarin表单的字符串

时间:2017-07-04 12:53:08

标签: c# xaml xamarin xamarin.forms

我创建了一个正确更新的可观察集合。但是只更新observable集合中的一个字符串。我在循环中抛出了一个调试点,并且字符串列表显示为有两个项目,但只有一个项目被添加到observable集合中。

设置可观察集合的函数:

public async Task GetNotificationData()
    {
       List<string> intermediary =  _database.getMessages();

        foreach (var variable in intermediary)
        {
            DataBaseList = new ObservableCollection<string> { variable };
        }
        _DataBaseList = DataBaseList;
    }

和从SQLite数据库返回数据的函数(getMessages):

   public List<string> getMessages()
    {

        var DataBaseSelection =  _connection.Query<MessageTable>("Select * From [MessageTable]");
        List<string> dataList = new List<string>();

        for (var i=0;i<DataBaseSelection.Count;i++)
        {
            dataList.Add(DataBaseSelection[i].message);
        }
        return dataList;

    }

为了完整性,Xaml:

<ListView
    x:Name="notificationList"
    ItemsSource="{Binding DataBaseList}">
</ListView>

要清楚这是显示前端列表中的一个字符串而不是另一个字符串,就像它跳过列表中的第二个字符串一样。 列表中的第一个字符串是&#34; test&#34;第二个被称为&#34; test2&#34;但只有测试显示在列表视图中。

任何见解?

3 个答案:

答案 0 :(得分:3)

在您的foreach中,您创建了ObservableCollection的新实例。

foreach (var variable in intermediary)
{
    DataBaseList = new ObservableCollection<string> { variable };
}

要使ObservableCollection正常工作,您需要将其实例化一次。如果要添加新列表,请清除列表,如下所示:

DataBaseList.Clear();

foreach (var variable in intermediary)
{
    DataBaseList.Add(variable);
}

答案 1 :(得分:2)

  

抱歉英语很差。

在设置可观察集合的这段代码中,您将在每次迭代中覆盖DataBaseList的内容,最后您将最后一个结果设置为可观察集合{{1} }。

_DataBaseList

我建议你这样做: - 在构造函数中初始化您的可观察集合; - 要填写它,请使用:

foreach (var variable in intermediary)
{
    DataBaseList = new ObservableCollection<string> { variable };
}
_DataBaseList = DataBaseList;

这必须奏效。看看吧。

答案 2 :(得分:0)

使用空ObservableColletion有两种方法:

  1. 只显示ObservableColletion一次,然后使用Clear()删除所有元素。
  2. 实例化实现ObservableCollection接口的新INotifyPropertyChanged
  3. 您的错误是由ObservableCollection实现INotifyCollectionChanged引起的,但它没有实现INotifyPropertyChanged接口。

    我希望这可以帮到你。