MVVM和显示更多GUI的命令

时间:2009-06-21 14:14:22

标签: wpf mvvm

我喜欢ViewModel公开的RelayCommand的MVVM概念。这非常优雅,对于无需进一步用户输入即可完成的操作。简单。可测试的。

但是,并非所有操作都是无UI的。有些需要确认(“您确定要删除吗?”)。其他人需要更多信息。打开文件可能需要从“文件打开”对话框到完整的导入向导。

在MVVM应用程序中,编写需要用户输入的命令的最佳方法是什么?是否存在以某种方式通过依赖注入解决此问题的既定模式?我应该在代码隐藏中编写KeyDown处理程序,并让它显式执行事件吗?我应该回到RoutedUICommand,并将所有“显示下一个GUI”代码放在我的视图中吗?或者是否有一些我完全失踪的明显事物?

2 个答案:

答案 0 :(得分:4)

我通常使用Dependency Injection来注入某种抽象的IShowTheInterface事物,然后从Command中调用抽象方法。然后,这些方法应该为您提供所需的答案,以确定是否继续执行操作以及用户提供的输入。

我最近在blog post with a bit of a different topic中使用此作为示例。

答案 1 :(得分:1)

这种东西(确认对话框,文件打开对话框等)通常在应用程序之间共享。所以我的偏好不是将它们放在ViewModel中。

ViewModel是特定于应用程序的,并且无限期地扩展ViewModelBase并不是一个好主意。相反,创建可重用的行为以扩展视图。在Expression Blend Gallery

处有几个行为样本

编辑:

行为可以拥有属性,您可以使用这些属性来指定行为特征,还可以获得一些反馈:

<Button Content="Open Document">
    <i:Interaction.Behaviors>
        <local:FileOpenBehavior 
            FileNameTarget="{Binding ElementName=tbDocName}"/>
    </i:Interaction.Behaviors>
</Button>

在上面的示例中,可以隐藏tbDocName - 或者您可以绑定到ModelView的属性。