【发布时间】:2016-03-03 15:38:49
【问题描述】:
我的网格:
<dxg:GridControl x:Name="StatisticsGridLevel1"
dx:ThemeManager.ThemeName="Office2013"
DataContext="{Binding FooViewModel}"
ItemsSource="{Binding FooCollection}">
视图模型:
private List<FooDto> fooCollection = new List<FooDto>();
public List<FooDto> FooCollection
{
get
{
return this.fooCollection;
}
private set
{
this.fooCollection = value;
this.NotifyPropertyChanged();
}
}
以及示例方法:
private void Foo()
{
foreach (var element in collection)
{
this.fooCollection.Add(new FooDto()
{
X = element.Foo1,
Y = element.Foo2,
Z = element.Foo3
});
}
this.NotifyPropertyChanged("FooCollection");
}
当我使用 ObservableCollection 时,一切正常。但我想使用列表(不是在循环中通知)。
在网格上开始滚动后视图刷新。有什么问题?
【问题讨论】:
-
你为什么不能坚持
ObservableCollection?除非集合实现INotifyCollectionChanged,否则在修改集合时网格不会自动更新。ObservableCollection实现了List没有的接口。 -
因为我向集合中添加了很多项目。我想在完成循环后刷新网格(手动调用 Notify)。
-
好的,我明白了,但我不太明白你的问题。这是什么意思:'视图在网格上的启动滚轮后刷新'?什么是启动滚轮?你指的是鼠标滚轮吗?您是否正在处理鼠标滚轮事件。如果是这样,那么这听起来可能与问题有关,您应该显示代码。听起来您在说
Foo中的视图仍然令人耳目一新,尽管您使用的是List而不是ObservableCollection?对吗? -
No :) 在第一步中 - 我使用默认值创建 List
FooCollection。这些值在网格中正确显示。在第二步中 - 我调用 Update() 方法。更新清洁集合并添加新项目。 FooCollection.Clear(); FooCollection.Add(...) // 元素 1 ... FooCollection.Add(...) // 元素 50000 this.NotifyPropertyChanged("FooCollection");网格显示旧值。我单击网格中的滚动条(使用旧值)或单击列(排序) - 网格已经显示正确的数据。
标签: c# wpf mvvm devexpress gridcontrol