如何在WPF列表框中设置一个新列表
本文关键字:列表 一个 新列表 设置 WPF | 更新日期: 2023-09-27 18:19:05
我正在使用简单的数据库浏览命令实现一个简单的MVVM WPF应用程序。
有一个带有列表框的示例窗口
<ListBox x:Name="listBoxPersons" ItemsSource="{Binding Path=Persons}" SelectedIndex="{Binding Path=SelectedPerson, Mode=OneWayToSource}" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="2" Margin="0,10,10,5" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
还有一个文本框用来插入where子句
<TextBox Grid.Column="2" Grid.Row="6" Margin="0,5,10,5" Name="textBoxWhereClause" />
Persons是一个ObservableCollection。我为人员实现了简单的添加/删除/更改命令。这工作。
问题:如果用户执行一个新的查询导致一个全新的集合,我该怎么做?如何将新集合动态绑定到列表框?
我是一个WPF初学者,很无奈。
任何帮助都是非常感激的!
How can I bind the new collection dynamically to the listbox?
你不需要重置绑定。绑定已经存在了,你只需要更新绑定源。
只需将Persons
集合替换为新检索的结果
你必须在你的视图模型
中有类似的内容private ObservableCollection<Person> _Person ;
public ObservableCollection<Person> Person
{
get
{
return _Person;
}
set
{
_Person = value;
OnPrpertyChanged("Person");
}
}
你可以做Person = YourNewCollection;
//新检索的结果
but there are about 50,000 persons in the table. This could result in performance difficulties
你可以做两件事
1)一次只检索有限数量的记录,并为用户提供下一个返回按钮。分页。
2)在ListBox中使用virtualization
选项,以便UI可以响应和高效。它确保只有那些从Person集合加载到列表框的对象才能在特定时间点显示