延迟文本更改事件一秒wpf

时间:2016-07-19 08:18:41

标签: c# wpf xaml

我有一个事件(ctc)在ComboBox中发生文本更改时触发,我想将其触发延迟一秒钟。 我到目前为止编写了这段代码并将其放在MainWindow

Timer aTimer = new Timer();
    aTimer.Interval = 1000;
    aTimer.Elapsed += new ElapsedEventHandler(ctc);
    aTimer.Enabled = true;

我是WPF的新手,我想知道在ElapsedEventHandler括号中放什么,我把偶数名称但是我收到了错误。 我还需要为ComboBox的Xaml代码添加任何内容吗?

2 个答案:

答案 0 :(得分:6)

嗯,最简单的方法是使用Delay属性作为@ASh提到。我之前不知道,但我尝试了,这太棒了:

XAML:

 <ComboBox IsEditable="True" Text="{Binding ComboBoxText, Mode=OneWayToSource, Delay=1000}">
    <ComboBoxItem Content="item1" />
    <ComboBoxItem Content="item2" />
    <ComboBoxItem Content="item3" />
</ComboBox>

查看模型:

private string comboBoxText;

public string ComboBoxText
{
    get { return this.comboBoxText; }
    set
    {
        if (this.SetProperty(ref this.comboBoxText, value))
        {
            Trace.WriteLine("*** New text: " + value);
            // RunDatabaseSearch(value);
        }
    }
}

SetProperty的实施位置INotifyPropertyChanged

在Visual Studio中观看输出窗口,文本将在用户最后一次输入后显示。

答案 1 :(得分:0)

这应该更好:

在.Net 4.0之后你可以使用(谢谢ASh):

await Task.Delay(1000); 

这是一个非阻塞的电话。

然后,在此声明之后,只需更改您的文字。

如果您正好使用.Net 4:

Here is a sample implementation of Delay in .Net 4.0

还有Thread.Sleep,但它似乎是不好的做法,因为它花费了很多资源(感谢Eli Arbel,Sam):

await System.Threading.Tasks.Task.Run(() => System.Threading.Thread.Sleep(1000));

没有完整的限定符:

await Task.Run(() => Thread.Sleep(1000));