MVVM模式下的OpenFileDialog

Posted 浣霜之剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM模式下的OpenFileDialog相关的知识,希望对你有一定的参考价值。

对于MVVM模式下的ViewModel层来说,是不应该直接访问OpenFileDialog或者FolderBrowserDialog的,否则VM会变得难以测试。

参考StackOverFlow,对ViewModel进行改造,使OpenFileDialog动作也可以测试。

首先实现接口Iioservice

技术分享
    public interface IIOService
    {
        string OpenFileDialog(string srcFilter = "");

        IList<string> OpenFileDialogMultiselect(string srcFilter = "");

        string FolderBrowserDialog();
    }
IIOService

在工程中实现该接口IOService

技术分享
   public class IOService : IIOService
    {
        public string OpenFileDialog(string srcFilter = "")
        {
            var op = new System.Windows.Forms.OpenFileDialog();
            op.Filter = srcFilter;
            if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)            
                return op.FileName;
            
            return "";
        }

        public IList<string> OpenFileDialogMultiselect(string srcFilter = "")
        {
            var op = new System.Windows.Forms.OpenFileDialog();
            op.Filter = srcFilter;
            op.Multiselect = true;
            if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                return op.FileNames;
            return new List<string>();
        }

        public string FolderBrowserDialog()
        {
            var path = new System.Windows.Forms.FolderBrowserDialog();
            var result = path.ShowDialog();
            if (result == System.Windows.Forms.DialogResult.OK)            
                return path.SelectedPath;
            
            return string.Empty;
        }
    }
IOService

这样就可以在测试的时候给VM注入一个实现该接口的桩对象,进而进行测试啦。

以上是关于MVVM模式下的OpenFileDialog的主要内容,如果未能解决你的问题,请参考以下文章

wpf mvvm模式下的image绑定

WPF Prism框架下基于MVVM模式的命令绑定事件

Android入门第65天-mvvm模式下的retrofit2+okhttp3+rxjava

一片文章轻度解析Vuex

C#中窗体中打开一个openFileDialog,选中一个文件后,点击"打开"按钮,获得选中文件的名称

六从GitHub浏览Prism示例代码的方式入门WPF下的Prism之MVVM中的FilteringEvents