当数据源更改时更新列表视图项

本文关键字:列表 视图 更新 数据源 | 更新日期: 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这样的内容呈现器