代码之家  ›  专栏  ›  技术社区  ›  Bevan

当后台处理更新XtratreList节点时,如何防止编辑器关闭?

  •  1
  • Bevan  · 技术社区  · 16 年前

    我在用电话 DevExpress Xtra TreeList 控件以显示一组分层的问题和回答-想象一个复杂的调查表,其中包含部分、子部分和各种问题。

    作为每个问题显示的信息的一部分,通过在后台线程上调用Web服务来获得一些背景信息;这些webservice调用的结果然后通过调用来填充树列表 TreeListNode.SetValue() .

    目前,这些呼吁 SetValue() 经验

    如何确保用户的编辑过程不受这些后台更新的影响?

    背景:一个典型的屏幕将有500多行,每行的webservice调用大约需要0.6秒才能返回。每0.6秒强制提交或取消用户的操作是不可接受的,强制用户等待处理完成(>5分钟)之后,他们才能做出任何改变,这同样糟糕。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    简单回答:你不能

    DevExpress的官方回应:

    不幸的是,当数据源值发生更改时,无法阻止活动编辑器关闭。这是不可能实现的,因为树列表应该始终与底层数据同步。此功能以通常方式通过IBindingList接口实现。为了响应“更改”通知,树列表必须刷新自身,从而重新加载数据。这将导致活动编辑状态重置。

        2
  •  0
  •   Bruno Altinet    14 年前

    我实现这一点的一种方法是,在一个更新事件(比如100毫秒)发生后,在一个小的时间延迟后使用ShowEditor()。我会因为notifypropertychanged更新而遇到问题,我会挂接FocusedNodeChanged。例如:

    FocusedNodeChanged += OnNodeChanged;
    private void OnNodeChanged(object s, FocusedNodeChangedEventArgs e)
        {
            _delayer.Start();
        }
    private void _delayer_Tick(object sender, EventArgs e)
        {
            ShowEditor();
            _delayer.Stop();
        }
    

    _delayer是一个带有tick事件的计时器类。有点粗糙,但它确实奏效了。