2014-05-18 52 views
0

我有一個文本框,我讓用戶輸入一些文本,然後過濾ListBox(有點像自動完成)。但是,我不確定在TextBox觸發TextChanged事件後如何更新ListBox?如何從TextChanged事件更新列表框

查看

<TextBox Name="textBox" TextChanged="textBox_TextChanged"/> 

<ListBox ItemsSource="{Binding NamesList}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

視圖模型

public ObservableCollection<string> NamesList 
{ 
    get 
    { 
     IEnumerable<string> names = MethodCallToGetStrings(); 
     return new ObservableCollection<string>(names); 
    } 
} 

public void UpdateNamesList(string _searchTerm) 
{ 
    IEnumerable<string> names = MethodCallToGetStrings() 
     .Where(x => x.Name.Contains(_searchTerm)) 
     .Select(x => x.Name); 

    // how to update NamesList from here? 
} 

文本框事件

private void textBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    m_viewModel.UpdateNamesList(textBox.Text); 
} 
+0

由於類型不同,無法將名稱分配給NamesList,也嘗試創建新的ObservableCollection。 – Michael

+0

爲什麼每次獲取NamesList時都要創建一個新的ObservableCollection?另外,你的二傳手在哪裏? –

+0

@RodrigoSilva是的,那可能是我出錯的地方。 'public ObservableCollection NamesList {get;組; ''現在有效。 – Michael

回答

2
public void UpdateNamesList(string _searchTerm) 
{ 
    IEnumerable<string> names = MethodCallToGetStrings() 
     .Where(x => x.Name.Contains(_searchTerm)) 
     .Select(x => x.Name); 

    NamesList.Clear(); 
    foreach(name in names) 
    { 
     NamesList.Add(name); 
    } 
} 
+0

我想選擇完整的x而不是它的屬性,而不是我們如何糾正代碼。 –

相關問題