【发布时间】:2014-06-06 15:51:24
【问题描述】:
我对 WPF 和 MVVM 模型相对较新,但是经过数小时搜索和阅读有关此事的文章后,我还没有提出明确的解决方案。
1) 模型:我有一个依赖于 SQL Express 数据库的 EF 模型。对于此示例,我将使用名为 Visits 的属性,即 DbSet(Of Visit)。
2) ViewModel:一个 ObservableCollection(Of Visit)。它是这样声明的:
Private _Visits As ObservableCollection(Of Visit)
Public Property Visits As ObservableCollection(Of Visit)
Get
Return _Visits
End Get
Set(value As ObservableCollection(Of Visit))
_Visits = value
RaisePropertyChanged("Visits")
End Set
End Property
...
Visits = New ObservableCollection(Of Visit)(
From V In Application.context.Visits
Where V.IsRobotGenerated AndAlso
Not V.IsSynced
)
3) 视图:WPF 数据网格。
<DataGrid
x:Name="grdVisits"
ItemsSource="{
Binding Path=Visits,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}
}"
/>
现在我有一个后台线程,它直接修改 EF 数据(执行所有 CRUD 操作)。 我想要的是数据网格来反映这些变化。
我现在正在做的是通过重新调用上面的构造函数来替换 Visits ObservableCollection,这会导致两个缺点:
1) 在性能方面,我认为这不是最佳选择,尤其是当我们谈论数千行(每行都有其 RowDetails)时。
2) 用户同时向下滚动了数据网格或打开了 RowDetailsTemplate。如果重置整个收藏,他的位置和一切都将丢失。
我在某处读过有关 DependencyProperties 的文章,但我没有时间仔细阅读它,因为我不知道它是否是指向正确方向的指针。如果是,我会很乐意这样做。
任何帮助将不胜感激。
【问题讨论】:
标签: wpf entity-framework wpfdatagrid observablecollection auto-update