Как установить новый список в WPF ListBox? - PullRequest
1 голос
/ 31 декабря 2011

Я реализую простое приложение MVFM WPF с простыми командами обработки данных.

Есть xaml-окно со списком

    <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>

Кроме того, есть текстовое поле для вставки где-предложение

    <TextBox Grid.Column="2" Grid.Row="6" Margin="0,5,10,5" Name="textBoxWhereClause" />

Persons - это ObservableCollection.Я реализовал простые команды Add / Delete / Change для людей.Это работает.

Вопрос: что мне делать, если пользователь выполняет новый запрос, в результате чего получается совершенно новая коллекция?Как можно динамически привязать новую коллекцию к списку?

Я новичок в WPF и беспомощен.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 31 декабря 2011

How can I bind the new collection dynamically to the listbox?

Вам не нужно сбрасывать привязку. Привязка уже есть, вам нужно только обновить источник привязки.

Просто нужно заменить коллекцию Persons на вновь полученные результаты

У вас должно быть что-то похожее на это в вашей модели View

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) используйте опцию virtualization в ListBox, чтобы пользовательский интерфейс был отзывчивым и эффективным. Он обеспечивает загрузку только тех объектов из коллекции Person в список, которые могут отображаться в определенный момент времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...