当数据源更改时更新列表视图项
本文关键字:列表 视图 更新 数据源 | 更新日期: 2023-09-27 18:06:47
我有一个列表,我用它作为日志。我想在列表视图中查看日志,因此我创建了:
<ListView Margin="12,114,12,12" Name="listView1" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" />
日志中填充了一个我没有创建的类的字段,所以有一个类:
SomeClass
{
public ReadOnlyCollection<Status> Log
{
get
{
return _log.AsReadOnly();
}
}
// other method and fields
// etc...
}
所以我能够看到列表项。此外,我可以用以下日志填充listview:
listView1.DataContext = server.Log; // server is an instance of SomeClass
唯一的问题是每次日志更改时,listview不更新。我必须调用listView1。DataContext = server.Log;每次我想刷新日志。
如何避免刷新列表视图?
您需要使用ObservableCollection<Status>
而不是ReadOnlyCollection<Status>
这样做的原因是,当一个项被添加/删除时,Observable集合会通知它所绑定的控件。
如果你想要每个Status
对象通知视图时,他们的属性之一的变化(所以一个属性在Status
实例的变化,但没有添加/删除的集合),然后Status
必须实现INotifyPropertyChanged
,每个属性需要在其setter上引发PropertyChanged
事件。
如果是第三方dll,也可以通过合成来实现。
旁注:为什么你的Margin
高于100?你应该使用像Grid
或者StackPanels
这样的内容呈现器