【发布时间】:2014-07-06 13:28:50
【问题描述】:
我有一个文本框,我让用户输入一些文本,然后过滤一个列表框(有点像自动完成)。但是,我不确定在 TextBox 上触发 TextChanged 事件后如何更新 ListBox?
查看
<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);
}
【问题讨论】:
-
由于类型不同,无法为 NamesList 分配名称,也尝试创建新的 ObservableCollection。
-
为什么每次得到NamesList都要创建一个新的ObservableCollection?另外,你的二传手在哪里?
-
@RodrigoSilva 是的,这可能是我出错的地方。
public ObservableCollection<string> NamesList { get; set; }现在可以使用了。