UpdateSourceTrigger 用法 C# WPF

UpdateSourceTrigger usage C# WPF

我目前正在我的项目中使用这个AutoCompleteTextBoxWPFTextBoxAutoComplete

我将 TextBox 绑定到 List<string> 个员工姓名。我就是这样做的;

<TextBox 
    Width="250"  Height="50" HorizontalAlignment="Center"
    Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" 
    behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding Employees}" 
/>

我希望 TextBox 做的是在用户输入员工姓名时提供建议。但是,根本没有出现任何建议,这让我相信我没有正确绑定 UpdateSourceTrigger

如果我只将行为绑定到 List<string>,那么当没有 属性 员工姓名时,Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" 如何工作?我有点不确定需要更改什么才能触发更新源。

该网站提供了这样的解释:现在,每当您的数据上下文的 "TestText" 属性 更改时,WPFTextBoxAutoComplete 都会为您提供自动完成建议。

但是,我不相信我的 DataContext 有 "Name" 属性。

编辑

/**** AutoComplete ****/
public static readonly DependencyProperty AutoCompleteTest = DependencyProperty.Register(
"Test", typeof(string), typeof(CompanyManagement), new PropertyMetadata(default(string)));

public string Test
{
    get { return (string)GetValue(AutoCompleteTest); }
    set { SetValue(AutoCompleteTest, value); }
}

文本框XAML

        <TextBox 
            Width="250"  Height="50" HorizontalAlignment="Center"
            Text="{Binding Test, UpdateSourceTrigger=PropertyChanged}" 
            behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding Employees}" 
        />

您只需要在您的 DataContext 中有一个名为 Name 的 属性 并带有更改通知(使用 DependencyPropertyINotifyPropertyChanged)。

  1. DependencyProperty:

    public static readonly DependencyProperty NameProperty = DependencyProperty.Register(
        "Name", typeof (string), typeof (WhateverClassYouHave), new PropertyMetadata(default(string)));
    
    public string Name
    {
        get { return (string) GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
    
  2. INotifyPropertyChanged:

    public class WhateverClassYouHave: INotifyPropertyChanged
    
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged(nameof(Name)); // C# 6 feature
        }
    }
    
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); // C# 6 feature
    }
    

随着您的输入,Name 属性 会发生变化,通知有关更改的行为,它会为您提供建议。

结果: