在Prism中设计一个简单的保存对话框

时间:2010-01-28 16:44:33

标签: .net wpf design-patterns prism

我正在使用Microsoft的Prism框架编写应用程序,但我无法找到一种简单的“保存文件”样式对话框的最佳方法。
注意:我无法使用标准对话框,因为我没有将文件保存到文件系统中,因此需要从头开始编写类似内容。

所以这是我对话的主要控件:

  • 显示文件夹层次结构的用户控件。 (IFolderView
  • 用于显示文件夹内容的列表视图。 (IFolderContentsView
  • 用户输入已保存文件名的文本框。

表单上唯一真正的交互是当用户选择左侧的文件夹时,右侧的列表视图会填充文件夹内容。

当我开始编写对话框时,我最初为我的用户控件创建了几个区域,并使用视图发现来添加我的视图。我这样做是因为我在应用程序的其他地方注入了IFolderView。我现在发现我需要了解区域中的控件,以便它们相互交互。我想到了EventAggregator但是这对于一个简单的保存对话框来说并不合适。

我对此问题的解决方案是使用视图注入。所以我问我的Unity容器是IFolderViewModel的实现,并在初始化期间将其视图设置为该区域的内容。这样我就对表单上的用户控件有了足够的了解,使其工作,但它仍然松散耦合。

这听起来像是一件明智的事吗?有没有更好的办法?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

大部分时间使用Prism,人们正在使用ISystemInteraction(像ISystemCommands之类的东西,或类似的东西)以某种方式引发对话框或与文件系统交互。这样它仍然是可测试的,但ViewModel不负责执行任何特定于视图的操作。这是一个示例界面:

public interface ISystemCommands
{
     //Raises a save file dialog with a prepopulated name
     void SaveFile(string name, byte[] content);
}

然后,您将提供可从Shell访问文件系统的实现。这是MVVM和可测试的(我喜欢)。

这里有一个相关的问题基本上给出了相同的答案: Open File Dialog MVVM