我有一个用作日志的列表。我希望在我创建的列表视图中看到日志:
<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;每次我想刷新日志。
如何避免刷新列表视图?
答案 0 :(得分:1)
您需要使用ObservableCollection<Status>
代替ReadOnlyCollection<Status>
原因是Observable集合会在添加/删除项目时通知它绑定的控件。
如果您希望每个Status
对象在其中一个属性发生更改时通知视图(因此Status
实例中的属性发生更改,但集合上没有添加/删除),则Status
必须实施INotifyPropertyChanged
,并且每个Property都需要在其setter上引发PropertyChanged
事件。
如果是第三方dll,您也可以通过composition完成所有这些操作。
旁注:为什么你的Margin
超过100?您应该使用ContentPresenters,例如Grid
或StackPanels