我有一个使用Telerik RadGridView控件和Caliburn.Micro MVVM框架实现的应用程序。由于一些性能问题,我需要实现Telerik VirtualQueryableCollectionView来代替正在使用的直接控件到ObservableCollection绑定。原始代码已将RadGridView的ItemsSouce属性绑定到视图模型的Prices属性。我不得不消除结合,这在后台代码:使用MVVM模式实现Telerik VirtualQueryableCollectionView
public PricingView(PricingViewModel vm)
{
InitializeComponent();
var dataView = new VirtualQueryableCollectionView()
{ LoadSize=20, VirtualItemCount = vm.Prices.Count };
dataView.ItemsLoading += (sender, e) =>
{
var view = sender as VirtualQueryableCollectionView;
if (dataView != null)
{
view.Load(e.StartIndex, vm.Prices.Skip(e.StartIndex).Take(e.ItemCount));
}
};
this.PricesGridView.ItemsSource = dataView;
}
因为这个代码仅与特定的用户界面功能,交易和它特定的视图实现,我很舒服,这个代码属于代码 - 而不是ViewModel,因为它将与ViewModel中的VirtualQueryableCollectionView引用相背离。我不满意的部分是将ViewModel的引用传递给View的构造函数。是否有一种很好的方法在代码隐藏中获取引用,而无需在构造函数中传递引用?
还是有更好的方法来做到这一切吗?
感谢您的回答,'性能问题'我引用了它进行数据绑定的时间。 –
我包含的代码片段通过将数据从'集合'按需'绑定到控件上来解决了我遇到的问题。实际上,代码使用数据集合上的Skip()和Take()扩展方法,就像您在答案的最后一行所做的一样。我看到我没有提到我的环境是Silverlight。 –