2016-02-04 7 views
0

настоящего время я использую этот AutoCompleteTextBox в моем проекте: WPFTextBoxAutoCompleteUpdateSourceTrigger использования C# WPF

Я связывание 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 вашего datacontext изменяется, WPFTextBoxAutoComplete предоставит вам предложения автозаполнения.

Однако, я не считаю, что мой DataContext имеет свойство «Имя».

EDIT:

/**** 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

Вы можете отлаживать связывание и видеть то, что происходит с текстом. Вы можете сделать это, добавив в текст «Text =» {Binding Name, diagnostics: PresentationTraceSources.TraceLevel = High, UpdateSourceTrigger = PropertyChanged} 'и добавьте пространство имен xmlns: diagnostics =": ​​System.Diagnostics; assembly = WindowsBase "в определение окна – Zippy

ответ

2

Вам просто нужно свойство Name в вашем DataContext с изменением уведомления (либо с DependencyProperty или INotifyPropertyChanged).

  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 свойство изменится, уведомляют поведение об изменении, и это будет предложите вам предложение.

Результат:

Result

+0

Спасибо за ответ! Как я могу изменить это так, чтобы он заполнялся на основе« Список »имени сотрудника? – CBreeze

+0

В вашем« DataContext »есть свойство« Сотрудники ». Я назначил его следующим образом: «Сотрудники = новый список {« John Doe »,« Jane Doe »,« Lara Croft »,« Sam Fisher »,« Szabolcs Dézsi »};' –

+0

Еще раз спасибо. однако: * 'Вызов конструктора по типу View.Companies.Test ', который соответствует указанным ограничениям привязки, сделал исключение.' Номер строки «8» и позиция линии «7». * – CBreeze

 Смежные вопросы

  • Нет связанных вопросов^_^