gpt4 book ai didi

c# - 在应用程序启动时实例化一个 ViewModel

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:13 26 4
gpt4 key购买 nike

我正在使用 MVVMLight 创建一个应用程序。

在我的应用程序中,我有一个“目录” View 和一个下载 View ,每个 View 都与它自己的 ViewModel 相关联,它们在 ViewModelLocator 中声明:

public class ViewModelLocator
{

public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);


SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<CatalogViewModel>();
SimpleIoc.Default.Register<CreatorViewModel>();
SimpleIoc.Default.Register<DownloadsViewModel>();
Messenger.Default.Register<NotificationMessage>(this, NotifyUserMethod);
}


public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}

public CatalogViewModel Catalog
{
get
{
return ServiceLocator.Current.GetInstance<CatalogViewModel>();
}
}

public DownloadsViewModel Downloads
{
get
{
return ServiceLocator.Current.GetInstance<DownloadsViewModel>();
}
}

public CreatorViewModel Creator
{
get
{
return ServiceLocator.Current.GetInstance<CreatorViewModel>();
}
}

private void NotifyUserMethod(NotificationMessage message )
{
MessageBox.Show(message.Notification);
}

public static void Cleanup()
{
// TODO Clear the ViewModels

}



}

我计划使用消息传递将我的 selectedCatalogItems 发送到下载 VM 中的集合,但它仅在用户首先打开下载 View 时才有效。在另一种情况下,下载 View 模型尚未创建,消息无处可去。

有没有办法在应用程序启动时调用 Downdload VM 的构造函数,或者我应该使用专用类来存储我的下载列表吗?

最佳答案

在应用程序生命周期的早期获取 View 模型的实例,因为服务定位器将在其缓存中保留它的一个实例。

public class ViewModelLocator {
static ViewModelLocator() {

SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<CatalogViewModel>();
SimpleIoc.Default.Register<CreatorViewModel>();
SimpleIoc.Default.Register<DownloadsViewModel>();

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

//Default instance
//Done so an instance will be generated and held in cache
var defaultDownloadsViewModel = ServiceLocator.Current.GetInstance<DownloadsViewModel>();
}

public ViewModelLocator(){
Messenger.Default.Register<NotificationMessage>(this, NotifyUserMethod);
}

public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}

public CatalogViewModel Catalog
{
get
{
return ServiceLocator.Current.GetInstance<CatalogViewModel>();
}
}

public DownloadsViewModel Downloads
{
get
{
return ServiceLocator.Current.GetInstance<DownloadsViewModel>();
}
}

private void NotifyUserMethod(NotificationMessage message )
{
MessageBox.Show(message.Notification);
}

public static void Cleanup()
{
// TODO Clear the ViewModels

}
}

关于c# - 在应用程序启动时实例化一个 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com