zoukankan      html  css  js  c++  java
  • 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注入一个实现该接口的桩对象,进而进行测试啦。

  • 相关阅读:
    gym 101480 Problem C: Cow Confinement 题解
    Uva 1072 Huffman Codes 题解
    NERC 2015 Hypercube 题解
    ACM ICPC 2017 WF Problem J Son of Pipe Stream题解
    CF Round # 295 (Div. 1)题解
    CF 1444 D Rectangular Polyline 题解
    BZOJ3308 九月的咖啡店
    BZOJ4025 二分图
    BZOJ4000 [TJOI2015]棋盘
    BZOJ3999 [TJOI2015]旅游
  • 原文地址:https://www.cnblogs.com/zhuyc110/p/5251317.html
Copyright © 2011-2022 走看看