我遇到了CollectionViewSource的问题。
我阻止用户远离CollectionViewSource中的项目,以防止我的代码崩溃。
我有这个:
private CollectionViewSource _source = new CollectionViewSource();
private List<Items> _itemLists;
private MyDbContext _context;
Constructor()
{
_itemLists = _context.Items.ToList();
_source.Source = _itemLists;
_source.View.CurrentChanged += View_CurrentChanged;
}
private void View_CurrentChanged(object sender, EventArgs e)
{
if (_source.View.IsCurrentBeforeFirst)
{
_source.View.MoveCurrentToFirst();
_source.View.Refresh();
return;
}
if (_source.View.IsCurrentAfterLast)
{
_source.View.MoveCurrentToLast();
_source.View.Refresh();
return;
}
// ... Do some other work here ...
}
我必须在每个if块中放入一个return语句,以防止View.CurrentItem为NULL。
这可以防止抛出Null异常,但奇怪的行为是当我尝试超出第一条记录(View.MoveCurrentToNext()
)后尝试调用IsCurrentViewBeforeFirst
时,没有任何反应。您必须再次调用它才能将视图更新到第一个之后的下一个记录。
相反,IsCurrentViewAfterLast
的行为相同。您需要两次调用View.MoveCurrentToPrevious()
,然后在用户尝试超出最后一条记录时,在最后一条记录显示上一条记录之前。
那么如何解决这个问题,以便我不需要两次调用这些方法?
答案 0 :(得分:0)
您可以阻止WPF中的事件冒泡,如下所示:
e.Handled = true;
我认为您的CollectionViewSource对象继承自IEnumerable对象。其中有成员作为索引,您可以在会话或任何静态容器中隐藏您的对象(例如wpf中的 Application.Current.Resources ),这样您可以在用户单击下一个或按钮之前更新您的索引。 如果你的对象没有从IEnumerable继承,我也建议
欢呼编码