Объем памяти
Я полагаю, это зависит не только от реализации вашего кода, но и от AutocompleteControlas, от того, как он использует связанный источник данных.
Реализуйте MainStream как вычисляемое свойство с yield return
в получателе, чтобы элементы вычислялись / возвращались по требованию во время выполнения
Для WPF4 проверьте, используется ли AutocompleteControl с использованием виртуализации данных WPF.По сути, вы можете переопределить стандартную панель элементов, чтобы использовать VirtualizingStackPanel
вместо StackPanel
, чтобы инфраструктура выделяла память и создавала элементы пользовательского интерфейса только для видимых элементов, а не для всех.
Фильтрация на лету
Взгляните на подход MVVM.Было бы легко использовать свойства, привязанные к элементу управления фильтра пользовательского интерфейса, для вычисления элементов MainSTream, в основном getter использовал бы общедоступные связанные свойства, и каждый раз, когда любое из них было изменено - MainSTream пересчитывал элементы и уведомлял пользовательский интерфейс через INotifyPropertyChanged
, очевидно, вам нужно реализоватьподдержка INotifyPropertyChanged
.См. Объяснение одного предложения для MVVM в WPF?
public IEnumerable<IMyItem> MainStream
{
get
{
foreach(var item in mainDataSource)
{
if (item.Name == this.NameFilterBoundToUiTextBox)
{
yield return item;
}
}
}
}
private string nameFilter;
public string NameFilterBoundToUiTextBox
{
get
{
return this.nameFilter;
}
set
{
if (this.nameFilter != value)
{
this.nameFilter = value;
// TODO: Implement INotifyPropertyChanged
this.OnPropertyChanged("NameFilterBoundToUiTextBox");
// THis would notify UI to rebind MainSream
this.OnPropertyChanged("MainStream");
}
}
}