码迷,mamicode.com
首页 > 其他好文 > 详细

MVVM模式下的OpenFileDialog

时间:2016-03-07 18:59:02      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

对于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

标签:

原文地址:http://www.cnblogs.com/zhuyc110/p/5251317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!