WPF 组合框延迟筛选



请考虑以下情况:有一个组合框和一个筛选器文本框,然后用户在文本框中键入文本 组合框项目源使用筛选器文本进行更新。一切正常,但过滤发生在每个键入的字母上。我想在过滤发生之前添加延迟(用户键入时不应用过滤器)。最简单的方法是什么?

最常用的方法是引入一个计时器,每次用户输入新字符时,您的时间跨度都会重置,但如果它超过 x 秒,则执行代码。

请记住异步,以便如果用户在您执行搜索时再次开始键入,您可以取消异步调用,因为该信息现在已过时。

如果您使用的是视图模型,只需将textbox1_TextChanged更改为相应的属性资源库

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (!tmr.Enabled)
        {
            tmr.Enabled = true;
            tmr.Start();
        }

        TimeSinceType = DateTime.Now;
    }
public DateTime TimeSinceType { get; set; }
protected void Load()
{
      tmr = new Timer();
      tmr.Interval = 200;
      tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
}
void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
    if ((DateTime.Now - TimeSinceType).Seconds > .5)
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            //LoadData();
            tmr.Stop();
        });
    }
}

现在,通过直接在绑定上放置延迟,可以更轻松地完成此操作:

<ComboBox Text={Binding MyBinding, Delay=200} />

最新更新