Создание статического представления в WPF, которое не будет инициализироваться каждый раз
Я работаю над приложением WPF, которое содержит пользовательский интерфейс оболочки, который на самом деле является MainWindow.xaml, и содержимое в нем (ContentPresenter) изменяется каждый раз, когда пользователь решает перейти в другой раздел приложения.
Когда пользователь возвращается к основному контенту, я хочу, чтобы приложение не инициализировало его каждый раз, а каким-то образом сохраняло его в памяти и восстанавливало, когда пользователь нажимает кнопку "Домой".
В своем текущем состоянии домашний вид снова и снова инициализируется при возврате к разделу "Домашний", что приводит к замедлению работы приложения. У меня такой вопрос: есть ли способ как-то сохранить этот пользовательский элемент управления в памяти, чтобы я мог быстро его восстановить?
Спасибо!
2 ответа
В конце концов я решил переместить ContentControl
в ItemsControl
а затем просто скрыть все элементы управления контентом, кроме активного.
Вот фрагмент моего кода:
<ItemsControl ItemsSource="{Binding ViewModels}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Visibility="{Binding Visibility}" Content="{Binding ViewModel}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
В моей ViewModel у меня есть фактический контент и другой Visibility
свойство, которое установлено в false
когда контент не является текущим и true
если это.
Спасибо всем помощникам!
Скрытие - вариант выбора, как предложено @Matt. Другой способ - исследовать удивительный мир фреймворков (Prism, Caliburn, Caliburn.Micro, ...)
Они предоставляют большую помощь в управлении приложениями WPF.
По сути, вам нужно сохранить ссылку на ViewModel, коллекцию в mainviewmodel или mainview, которая отслеживает загруженные viewmodels.