1

我目前AutoCompleteTextBox在我的项目中使用它:WPFTextBoxAutoComplete

我将 TextBox 绑定到一个List<string>员工姓名。我正在这样做;

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

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

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

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

但是,我不相信 myDataContext有“名称”属性。

编辑

/**** 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}" 
        />
4

1 回答 1

2

您只需要Name在您DataContext的更改通知中调用一个属性(使用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属性会发生变化,通知有关更改的行为,它会为您提供建议。

结果:

结果

于 2016-02-04T09:24:15.777 回答