2016-02-04 31 views
0

我目前在我的項目中使用此AutoCompleteTextBoxWPFTextBoxAutoCompleteUpdateSourceTrigger使用C#WPF

我的文本框結合員工姓名的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}"如何在沒有員工姓名的屬性時工作?我有點不確定需要更改什麼來觸發更新源。

網站提供此解釋:現在,每次更改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); } 
} 

文本框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 =「clr-namespace:System.Diagnostics; assembly = WindowsBase「'到窗口定義 – Zippy

回答

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性質將發生變化,通知有關更改的行爲,它會爲您提供建議。

結果:

Result

+0

感謝您的回答!我怎樣才能改變這個,以便根據員工姓名的列表填寫? – CBreeze

+0

在你的'DataContext'中只有一個叫'Employees'的屬性。我分配它是這樣的:'Employees = new List {「John Doe」,「Jane Doe」,「Lara Croft」,「Sam Fisher」,「SzabolcsDézsi」};' –

+0

再次感謝。然而:*'在類型'View.Companies上調用構造函數。測試'匹配指定的綁定約束拋出一個異常。'行號「8」和行位置「7」。* – CBreeze

相關問題