由于各种原因,您尝试执行的操作不受支持。可以说 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
}
}
使用单例服务
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
它在一个使您的代码可测试的界面中从应用程序公开属性字典和 SavePropertiesAsync。