CollectionViewSource.View未在端点刷新

时间:2016-02-17 12:02:36

标签: c# .net wpf

我遇到了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(),然后在用户尝试超出最后一条记录时,在最后一条记录显示上一条记录之前。

那么如何解决这个问题,以便我不需要两次调用这些方法?

1 个答案:

答案 0 :(得分:0)

您可以阻止WPF中的事件冒泡,如下所示:

e.Handled = true;

我认为您的CollectionViewSource对象继承自IEnumerable对象。其中有成员作为索引,您可以在会话或任何静态容器中隐藏您的对象(例如wpf中的 Application.Current.Resources ),这样您可以在用户单击下一个或按钮之前更新您的索引。 如果你的对象没有从IEnumerable继承,我也建议

欢呼编码