0 голосов
спросил от в категории CWPF
Если вы используете привязку данных к ObservableCollection, тогда ответ да.

Чтобы подтвердить, попробуйте. Создайте новый проект, добавьте список, установите источник данных Items, добавьте две кнопки, один для переключения состояния видимости, другой - Clear (не новый) и перезагрузите ObservableCollection фиктивными данными. Запустите, нажмите кнопку «Скрыть», нажмите кнопку «Перезагрузка», снова нажмите кнопку «Скрыть», чтобы отобразить. У вас будет подтвержденный ответ.

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Я думаю, что вижу, что вы собираетесь с этим вопросом, но привязка данных сама по себе является очень дешевой операцией. Конкретная часть привязки коллекций к элементам управления, которые могут повлиять на производительность, - это генерация/рендеринг элементов пользовательского интерфейса для отображения этих элементов.

Последняя часть смягчается в WPF с помощью виртуализации , Итак, скажем, ваш ListBox скрыт или, может быть, имеет только 10 строк, и вы привязываете к нему список из 10000 элементов. Насколько это повлияет на производительность? Не вдаваясь в подробные сведения о виртуализации, этот ответ не так уж и много для обычного отображения пользовательского интерфейса.

Теперь в этом уравнении есть еще одна вещь, которая может повлиять на производительность, и это поиск что первоначальный список из 10 000 элементов правильно? Возможно, это сложный вызов базы данных или работа с надежным API ... Надеюсь, этот список будет загружен без потери, но даже если вы это сделаете, если связаны данные с ListBox, что привязка все равно будет происходить и попытаться инициализировать этот объект, даже если это скрытый - и это может быть бесполезным расходом.

В этом последнем сценарии вы все еще хотите использовать привязку данных; однако вы хотите инициализировать/заполнить элементы, когда элемент управления фактически находится в поле зрения (т. е. на текущем TabItem в TabControl). Существует множество способов сделать это, но, как правило, ваше представление вызывает метод инициализации/команду в вашей модели представления. Если представление уже связано, добавление элементов в существующую коллекцию может вызвать проблемы с перекрестными потоками; однако, если вы установите свойство в новую коллекцию, вы не будете. И если вы работаете с большими коллекциями, этот подход лучше всего подходит, поэтому вы не обжигаете уведомления при каждом добавлении.

Что все говорят, оба подхода имеют свои плюсы и минусы. Если вы собираетесь выполнять фоновую работу и хотите избежать проблем с потоками, я бы взглянул на эту статью:

#Multithreading in C# .NET 4.5 (Part 2) # [#^ # ]

Категории

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

Связанных вопросов не найдено

...