我正在尝试在文本框UpdateSourceTrigger
上创建一个小延迟,以确保用户完成输入。
<TextBox
Text="{Binding SearchEngineCompassLogView.IdSearch,
Mode=TwoWay,
Source={StaticResource CompassLogView},
UpdateSourceTrigger=PropertyChanged, Delay=2000}" />
问题是,如果用户类型非常快,则源不会更新。
我已将Delay
设置为2000秒,因此问题更加明显。
财产:
public string IdSearch {
get { return _idSearch; }
set {
if (_idSearch != value && value != null) {
_idSearch = value;
NotifyPropertyChanged();
SearchForID(_idSearch);
}
}
}
问题不在于NotifyPropertyChanged();
答案 0 :(得分:0)
我无法重现您描述的行为。我还认为你在Text属性的绑定定义中出错了(如果在调试会话期间你应该在Visual Studio的输出窗口中得到绑定错误)。
我认为应该是
Text="{Binding IdSearch,
但我不知道因为我不知道你的班级结构。
我做了一个小例子来证明属性的延迟和更新按预期工作。当您在属性IdSearch的setter中设置BreakPoint并运行该示例时,您将看到在指定的延迟时间之后调用setter。无论你输入单词的速度有多快。
<强> XAML:强>
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="MainWindow"
Width="525"
Height="350">
<Window.Resources>
<local:Dummy x:Key="CompassLogView" />
</Window.Resources>
<Grid>
<TextBox Text="{Binding IdSearch, Mode=TwoWay, Source={StaticResource CompassLogView}, UpdateSourceTrigger=PropertyChanged, Delay=2000}" />
</Grid>
</Window>
<强> C#:强>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2 {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
public class Dummy {
private string _idSearch;
public string IdSearch {
get { return _idSearch; }
set {
if (_idSearch != value && value != null) {
_idSearch = value;
//NotifyPropertyChanged();
//SearchForID(_idSearch);
}
}
}
}
}
答案 1 :(得分:0)
您可以为此编写一个行为。如果您正在寻找现有行为,那么它就在Catel中。您可以使用Catel或仅复制/粘贴行为:
https://catelproject.atlassian.net/wiki/display/CTL/UpdateBindingOnTextChanged