То, что вы пытаетесь сделать, не поддерживается по разным причинам. Достаточно сказать, что Singleton ViewModel - очень плохая практика и вызывает много проблем. Хотя мы не можем помешать вам зарегистрировать ViewModel в качестве одноэлементного контейнера, это приведет к ошибкам в вашем приложении.
Соответствующие способы
На самом деле вы не предоставили никаких сведений о том, что вы Вы пытаетесь создать экземпляр, но один из этих методов должен работать для вас.
Используйте IInitialize или INavigationAware.OnNavigatedTo
public class LoginViewModel : IInitialize
{
public void Initialize(INavigationParameters parameters)
{
// Initialize anything you need to for the life cycle of your ViewModel here
}
}
Используйте службу Singleton
public class SomeService : ISomeService
{
public string Username { get; set; }
}
public partial class App : PrismApplication
{
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<LoginPage, LoginViewModel>();
containerRegistry.RegisterSingleton<ISomeService, SomeService>();
}
}
public class LoginViewModel
{
private ISomeService _someService { get; }
public LoginViewModel(ISomeService someService)
{
_someService = someService;
UserName = _someService.UserName;
}
// simplified for example
public string UserName { get; set; }
private void DoLogin()
{
_someService.UserName = UserName;
}
}
Я также должен указать, что если вы ищете что-то для одного из после сеанса до следующего запущенного приложения вы можете использовать встроенный IApplicationStore
, который предоставляет словарь свойств и SavePropertiesAsyn c из приложения в интерфейсе, обеспечивающем тестируемость вашего кода.