打开文件对话框MVVM

好吧,我真的很想知道MVVM开发者如何处理WPF中的打开文件对话框。

我真的不想在我的ViewModel中执行此操作(其中“浏览”是通过DelegateCommand引用的)

void Browse(object param)
{
    //Add code here
    OpenFileDialog d = new OpenFileDialog();

    if (d.ShowDialog() == true)
    {
        //Do stuff
    }
}

因为我认为这违背了MVVM方法。

我该怎么办?


这里要做的最好的事情就是使用一项服务。

服务只是您从中央服务存储库(通常是IOC容器)访问的类。 该服务然后实现您需要的OpenFileDialog。

所以,假设你在Unity容器中有一个IFileDialogService ,你可以这样做...

void Browse(object param)
{
    var fileDialogService = container.Resolve<IFileDialogService>();

    string path = fileDialogService.OpenFileDialog();

    if (!string.IsNullOrEmpty(path))
    {
        //Do stuff
    }
}

我希望对其中的一个答案发表评论,但唉,我的声望还不够高。

有一个像OpenFileDialog()这样的调用违反了MVVM模式,因为它隐含了视图模型中的视图(对话框)。 视图模型可以调用类似GetFileName()(也就是说,如果简单绑定不够),但它不应该在乎如何获得文件名。


我使用一个服务,例如我可以传入我的viewModel的构造函数或通过依赖注入来解析。 例如

public interface IOpenFileService
{
    string FileName { get; }
    bool OpenFileDialog()
}

和一个实现它的类,使用OpenFileDialog。 在viewModel中,我只使用接口,因此可以在需要时模拟/替换它。

链接地址: http://www.djcxy.com/p/56117.html

上一篇: Open File Dialog MVVM

下一篇: Implementing MVVM in WPF without using System.Windows.Input.ICommand