2011-08-28 101 views
1

我有一个列表,我将其用作日志。我想在日志中看到一个列表视图为此我已经建立:数据源更改时更新列表视图项目

<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 

唯一的问题是,每一次更改日志列表视图不会更新。我必须调用listView1.DataContext = server.Log;每次我想刷新日志。

我该如何避免刷新listview?

回答

1

您需要使用ObservableCollection<Status>而不是ReadOnlyCollection<Status>

这样做的原因是,观察到的集合通知势必每当添加一个项目/拆下来的控制。

如果希望每个Status对象通知视图时的财产变化之一(所以在Status实例的属性发生更改,但不存在添加/删除的集合),然后Status必须实现INotifyPropertyChanged,和每个物业需要在其设置者上筹集PropertyChanged事件。

如果是第三方的dll,你也可以通过composition来完成这一切。

旁注:为什么你有一个Margin高于100?你应该使用ContentPresenters,如GridStackPanels

+0

该类实际上是一个DLL,所以我无法修改它。如果我可以,那么我会每次发生日志更改时触发一个事件.... –

+0

我更新了我的答案(请参阅关于作文的部分)。 –

相关问题