Создание статического представления в WPF, которое не будет инициализироваться каждый раз - PullRequest
0 голосов
/ 28 марта 2012

Я работаю над приложением WPF, которое содержит пользовательский интерфейс оболочки, который на самом деле является MainWindow.xaml, и содержимое в нем (ContentPresenter) изменяется каждый раз, когда пользователь решает перейти в другой раздел приложения. *

Когда пользователь возвращается к основному контенту, я хочу, чтобы приложение не инициализировало его каждый раз, а каким-то образом сохраняло его в памяти и восстанавливало, когда пользователь нажимал кнопку «Домой».

В своем текущем состоянии домашний вид снова и снова инициализируется при возврате к разделу «Домашний», что приводит к замедлению работы приложения. У меня такой вопрос: есть ли способ как-то сохранить этот пользовательский элемент управления в памяти, чтобы я мог быстро его восстановить?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Скрытие - это, конечно, вариант, предложенный @Matt. Другой способ - исследовать удивительный мир фреймворков (Prism, Caliburn, Caliburn.Micro, ...)

Они оказывают большую помощь в управлении приложениями WPF.

По сути, вам нужно сохранить ссылку на ViewModel, коллекцию в mainviewmodel или mainview, которая отслеживает загруженные модели представления.

0 голосов
/ 28 марта 2012

В конце концов я решил переместить 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, если оно есть.

Спасибо всем помощникам!

...