2011-02-04 121 views
1

我正在编写遵循MVVM原则的WPF应用程序。WPF/MVVM - 如何在启动时执行命令?

我不想在启动时执行命令 - 我怀疑什么是最好的方法?

ViewModel对于是否有任何视图应该是漠不关心的,对吧?

是否可以在虚拟机构造函数中做最后一件事呢?或者是否有'我现在可以挂接的应用程序正在运行,所有初始化已完成'的事件?

把它连接到视图模型感觉不对?

为了具体一点,我想作为Visual Studio并加载'最近的解决方案',如果用户已经在首选项中选择了它。如果用户通过GUI手动加载解决方案,我在MainFormViewModel中启动流程,并且可以在那里处理构造函数的最后一行中的加载?

有什么想法?

安德斯,丹麦

回答

2

Windows.Interactivity方法或从构造函数异步加载它们的首选项同样可行 - 如果您使用MefedMVVM框架,则存在替代方案。

您也可以导入IContainerStatus附着于该图是从视图模型完全加载(因此没有忘记做在XAML)更多信息,请here

+0

+1,我完全忘记了`MEF`。 – decyclone 2011-02-04 15:48:03

0

你能做的就是用你的MainFormLoaded事件(这需要加载的解决方案之一)。

使用Windows.InteractivityEventTrigger将命令附加到Loaded事件。在该命令的执行上,加载解决方案。

0

我会介绍控制器这是负责UI工作流程。他们知道应用程序何时启动并且可以执行命令。这不违反MVVM模式。如果您对这项工作感兴趣,那么您可能会发现有趣的示例应用程序WPF Application Framework (WAF)

0

我真的想避免从视图模型构造函数中调用方法 - 在我看来,激活从构造事件的正是这样做的(或至少使用棱镜时,因为我(应该提到,)

。我最终做了简单的事情,并在施工结束后简单地调用我的主视图模型上的Loaded方法。

尽管如此,斯科特挑出了答案 - 谢谢大家花时间,甚至欣赏你的观点如果我最终选择了另一种方式。

丹麦安德斯

 var mainViewProvider = ObjectFactory.GetInstance<IMainViewProvider>(); 
     var mainWindowViewModelProvider = ObjectFactory.GetInstance<IMainWindowViewModelProvider>(); 

     var mainWindow = mainViewProvider.GetView(); 
     var mainWindowViewModel = mainWindowViewModelProvider.GetViewModel(); 
     mainWindow.DataContext = mainWindowViewModel; 

     mainWindowViewModel.Loaded(Settings.Default.LoadLatestOnStart); 

     mainWindow.Show(); 
0

这没关系,如果当您设置在代码方面,但如果你从XAML做到这一点 - 为的透明度和灵活起见,应该考虑支持代码和XAML。

另一种方法可以是在符合某些标准时从xaml触发模型上的某些内容。

我相信故事板可以用于这种方法。

/Torben Falck,Strongminds,Denmark,www.strongminds.dk

+0

对不起,这是Anders提供的例子,他在代码中初始化模型(请参阅两篇文章) – 2011-02-08 10:25:34