Я использую SimpleMVVM Toolkit.Сохранять состояние пользовательского интерфейса от ViewModel при переключении просмотров
У меня есть вид (manage_view) с несколькими кнопками, которые будут перемещаться (установить источник кадра) в новые виды (manage_import_view, manage_scanners_view и т. Д.). У каждого представления есть собственная виртуальная машина.
Для каждого из видов я устанавливаю datacontext для виртуальной машины с помощью локатора. Локатор вводит ServiceAgent в виртуальную машину.
Проблема в том, что при переходе к другим представлениям состояние предыдущего вида теряется. Например, я бы сделал импорт в Manage_Import_View и привязался к свойствам на виртуальной машине. Когда я перехожу к Manage_Scanners_View, а затем обратно в Manage_Import_View, свойства, которые я привязал, теряются.
Я понимаю, что происходит, но я не уверен, как его решить. Как сохранить состояние просмотров при переключении между ними?
С нетерпением ждем ваших соображений по этому вопросу.
(Я искал Switching between views according to state, но это не совсем то, что мне нужно.)
Редактировать
Мой локатор
public ImportViewModel ImportViewModel
{
get
{
IIntegrationServiceAgent sa = new IntegrationServiceAgent();
return new ImportViewModel(sa);
}
}
В XAML мой взгляд, я установить DataContext
DataContext="{Binding Source={StaticResource Locator}, Path=ImportViewModel}"
Навигация is lik e so
private void Navigate(string pageName)
{
Uri pageUri = new Uri("/Views/" + pageName + ".xaml", UriKind.Relative);
this.SelectedPage = pageUri;
this.SelectedPageName = pageName;
}
У меня есть обратный вызов завершения после того, как импорт завершен. Это устанавливает реквизиты, привязанные к моему представлению, - - это те, которые сбрасываются после переключения представлений.
private void ImportCompleted(IntegrationResult intresult, Exception error)
{
if (error == null)
{
_errorCount = intresult.Errors.Count;
ErrorList = intresult.Errors;
ResultMessage = intresult.Message;
ErrorMessage = (errorList.Count == 1 ? "1 error" : errorList.Count.ToString() + " errors");
Notify(ImportCompleteNotice, null); // Tell the view we're done
ShowErrorDialog(importType);
}
else
NotifyError(error.Message, error);
IsImportBusy = false;
}
Есть ли 'TabControl', который содержит ваши представления? – MoonKnight
Killercam, я решил не использовать TabControl, но функциональность, на которую я нацелилась, такая же. – ceebreenk
Существует стандартный способ хранения содержимого элемента управления вкладкой в памяти, но трудно понять, почему компоненты пользовательского интерфейса не хранятся в том случае, если вы описываете ... Можете ли вы прояснить изображение и некоторый код/XAML? – MoonKnight