关于 WPF 中的数据虚拟化WPF:数据虚拟化 http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx是一篇好文章。
使用此功能,数据虚拟化在我的代码中执行得很好,但存在一个问题,即我无法将 ViewModel 中的属性与 View 中 ItemsControl 的 SelectedItem 绑定。如果数据加载时一项数据满足某些条件,则该一项将在 ViewModel 中设置为属性,然后与 View 中的 ItemsControl 的 SelectedItem 绑定,但不会。
我关于此的代码如下。关于IItemsProvider和VirtualizingCollection的类型,请参考WPF:数据虚拟化 http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx.
到目前为止,我已经尝试过:
- 我确信如果不使用数据虚拟化,所选项目绑定会很酷。
- VirtualizingCollection 中的 IndexOf(T item) 方法始终返回 -1。由于认为这将是问题所在,因此我实现了 IndexOf(T item) 返回实际索引,但它并不关心这个问题。
实现IItemsProvider的代码
public class WordViewModelProvider : IItemsProvider<WordViewModel>
{
private string _searchText = "some text";
public WordViewModel SelectedItem
{
get;
private set;
}
#region IItemsProvider<WordViewModel> Members
public int FetchCount()
{
lock (_words)
{
int count = (from word in _words
where word.Name.Contains(_searchText)
select word).Count();
return count;
}
}
public IList<WordViewModel> FetchRange(int startIndex, int count)
{
lock (_words)
{
//Please, regard _word as IEnumerable<Word>
IQueryable<Word> query = (from word in _words
where word.Name.Contains(_searchText)
select word);
List<WordViewModel> result = query.ToList().ConvertAll(w =>
{
var wordViewModel = new WordViewModel(w, _searchText);
if (w.Name.Equals(_searchText, StringComparison.InvariantCultureIgnoreCase))
{
SelectedItem = wordViewModel;
}
return wordViewModel;
});
return result;
}
}
#endregion
}
ViewModel中使用VirtualizingCollection的代码
public void ViewList()
{
var wordViewModelProvider = new WordViewModelProvider();
var virtualizingCollection = new VirtualizingCollection<WordViewModel>(wordViewModelProvider);
//IList<WordViewModel> type to bind with View's ItemsSource.
WordViewModels = virtualizingCollection;
//WordViewModel type to bind with View's SelectedItem
SelectedItem = wordViewModelProvider.SelectedItem;
}
我想发布关于虚拟化在WPF中处理大数据集。
-
用户界面虚拟化 http://bea.stollnitz.com/blog/?p=338 vs 数据虚拟化 http://bea.stollnitz.com/blog/?p=344.
对于虚拟化方法:
- 保罗·麦克莱恩 http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx
- 文森特·范登伯格 http://bea.stollnitz.com/files/52/DataVirtualization.pdf
-
斯托尔尼茨 https://datavirtualization.codeplex.com/: 他/她描述了结合了前两者的一些最佳功能的解决方案,并解决了我的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)