如何在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初学者,很无奈。

任何帮助都是非常感激的!

如何在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集合加载到列表框的对象才能在特定时间点显示