我目前在我的项目中使用此AutoCompleteTextBox
:WPFTextBoxAutoComplete
我将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}"
/>
答案 0 :(得分:2)
您只需在Name
中添加一个名为DataContext
的媒体资源,其中包含更改通知(DependencyProperty
或INotifyPropertyChanged
)。
使用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); }
}
使用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
属性将更改,通知有关更改的行为,它将为您提供建议。
结果: