UpdateSourceTrigger 用法 C# WPF
UpdateSourceTrigger usage C# WPF
我目前正在我的项目中使用这个AutoCompleteTextBox
:WPFTextBoxAutoComplete
我将 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
的 属性 并带有更改通知(使用 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
属性 会发生变化,通知有关更改的行为,它会为您提供建议。
结果:
我目前正在我的项目中使用这个AutoCompleteTextBox
:WPFTextBoxAutoComplete
我将 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
的 属性 并带有更改通知(使用 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
属性 会发生变化,通知有关更改的行为,它会为您提供建议。
结果: