UpdateSourceTrigger用法C#WPF

时间:2016-02-04 09:11:03

标签: c# wpf autocomplete updatesourcetrigger

我目前在我的项目中使用此AutoCompleteTextBoxWPFTextBoxAutoComplete

我将TextBox绑定到List<string>个Employee名称。我是这样做的;

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

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

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

网站提供了以下解释:现在,每次更改datacontext的“TestText”属性时,WPFTextBoxAutoComplete都会为您提供自动完成建议。

但是,我不相信我的DataContext有“姓名”属性。

编辑

/**** 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); }
}

TextBox XAML

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

1 个答案:

答案 0 :(得分: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
    }
    
  3. 在您键入时,Name属性将更改,通知有关更改的行为,它将为您提供建议。

    结果:

    Result