Ленивая загрузка wpf Combobox пунктов - PullRequest
4 голосов
/ 25 мая 2010

У меня есть IEnumerable <>, который лениво загружает свои данные. Я хочу просто установить ItemsSource в Combobox для IEnumerable, но когда я это делаю, он все равно загружает все данные (что удаляет точку отложенной загрузки).

Я тоже пробовал это с Linq-To-Sql, так как это похоже на похожую теорию, и она также загружает все данные.

Есть ли простой способ сделать это?

Ответы [ 6 ]

3 голосов
/ 26 июля 2010

Попробуйте установить свойство IsAsync в привязке ItemsSource-ComboBox к True:

<ComboBox ItemsSource={Binding YourItemsSourceProperty, IsAsync=True}
          SelectedItem={Binding YourSelectionProperty} />

Если это ничего не меняет, взгляните на это: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3d343489-90c4-4bdc-8bd9-1046ec9daf76 Возможно, вам придется использовать IList вместо этого.

Кроме того, вы можете использовать PriorityBinding, чтобы заполнить список некоторыми временными данными, пока окончательный список не будет полностью загружен.

2 голосов
/ 25 мая 2010

Не привязывайте элемент управления к IEnumerable напрямую. Вместо этого, привяжите его к ObservableCollection (которая в начале пуста.) Тем не менее, продолжайте ленивую загрузку IEnumerable как обычно (либо запускается выпадающим списком, либо чем-то еще). Пока загружаются данные или когда у вас достаточно данные, добавьте элементы в эту коллекцию ObservableCollection, чтобы заполнить поле со списком.

1 голос
/ 19 июля 2010

Если вы хотите создать свой собственный класс, который будет иметь список, вы можете использовать интерфейс INotifyPropertyChanged, чтобы сообщить, что ваша коллекция была изменена. Или как использовать ObservableCollection, как это уже было предложено

1 голос
/ 25 мая 2010

Я пытаюсь сделать то же самое. Но, как я выяснил, если вы хотите использовать стандартные привязки в выпадающем списке (набор для ItemsSource и dataItem для SelectedValue / SelectedItem), необходимо написать свой собственный элемент управления. Combobox наследуется от Selector, и когда у вас есть ограниченная коллекция для свойства ItemsSource, и вы меняете значение свойства, которое ограничено на SelectedValue / SelectedItem, тогда Selector вызывает свой собственный частный метод FindItemWithValue (значение объекта). Этот метод сначала просматривает элементы в ограниченной коллекции, пока не найдет одинаковое значение. Это, конечно, заставит вас собрать все предметы перед выбранным.

1 голос
/ 25 мая 2010

Свяжите ItemsSource вашего ComboBox с ObservableCollection.

Теперь, когда ваш IEnumerable lazy загружает данные, немедленно добавляйте их в ObservableCollection

foreach(Item i in myIEnumerable)
{
    myObsCol.Add(i);
}

Это обновит интерфейс после добавления каждого элемента.

1 голос
/ 25 мая 2010

Я не думаю, что WPF ComboBox поддерживает ленивую загрузку элементов из ItemsSource. Зачем вам в любом случае ленивая загрузка, и когда вы ожидаете, что она вызовет ленивую загрузку?

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