使用RX过滤DataView

时间:2017-06-12 17:41:09

标签: .net wpf system.reactive dataview reactive

我正在构建一个WPF应用程序,当我需要过滤ListBox时,我陷入困境。我显然有一个文本框供用户输入过滤字符串,我使用RX来处理它。

 filterBox = Observable.FromEventPattern<TextChangedEventHandler, TextChangedEventArgs>(
            h => this.filterText.TextChanged += h,
            h => this.filterText.TextChanged -= h)
            .Throttle(new TimeSpan(0, 0, 0, 0, 750))
            .ObserveOnDispatcher()
            .Subscribe(t => this._datacontext.DoFiltering(this.filterText.Text));

filterText是TextBox。 DoFiltering是viewmodel中用于进行过滤的方法。

  public void DoFiltering(string t)
    {
        DataView vw = _bks.clienteView;
        vw.RowFilter = String.Format(@"(CFPIva LIKE '%{0}%' OR
                                        Nominativo LIKE '%{0}%')", t);
        Dati = vw;
    }

Dati是ListBox ItemsSource属性绑定到的属性。

问题是ListBox可以包含数万个元素,据我所知,我的代码在主线程上执行过滤。这可能会挂起UI。

那么,如何在另一个线程/任务中执行过滤?最好使用RX而已? Do运营商?

此外,DataView中的过滤如何在引擎盖下工作?一旦我设置了RowFilter属性,它就会启动过滤操作吗?

0 个答案:

没有答案