我创建了一个正确更新的可观察集合。但是只更新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;但只有测试显示在列表视图中。
任何见解?
答案 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
有两种方法:
ObservableColletion
一次,然后使用Clear()
删除所有元素。ObservableCollection
接口的新INotifyPropertyChanged
。您的错误是由ObservableCollection
实现INotifyCollectionChanged
引起的,但它没有实现INotifyPropertyChanged
接口。
我希望这可以帮到你。