Click here to Skip to main content
15,893,668 members
Articles / Web Development / HTML

WPF x FileExplorer x MVVM

Rate me:
Please Sign up or sign in to vote.
4.99/5 (52 votes)
24 Nov 2012LGPL323 min read 290.6K   9.4K   228  
This article describe how to construct FileExplorer controls included DirectoryTree and FileList, using Model-View-ViewModel (MVVM) pattern.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LYCJ (c) 2010 - http://www.quickzip.org/components                                                            //
// Release under LGPL license.                                                                                   //
//                                                                                                               //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;

namespace System.IO.Tools
{
    public enum WorkType { Unknown, List, Copy, Move, Delete };
    public enum WorkStatusType { wsCreated, wsRunning, wsAborted, wsCompleted }
    public enum WorkResultType { wrSuccess, wrAborted, wrFailed }
    public enum OverwriteMode { Ask, KeepOriginal, Replace };

    #region Event Handler
    public delegate void WorkProgressEventHandler(object sender, WorkProgressEventArgs e);
    public delegate void WorkMessageEventHandler(object sender, WorkMessageEventArgs e);
    public delegate void WorkStartEventHandler(object sender, WorkStartEventArgs e);
    public delegate void WorkFinishedEventHandler(object sender, WorkFinishedEventArgs e);
    public delegate void WorkPausedEventHandler(object sender, WorkPausedEventArgs e);
    public delegate void WorkResumedEventHandler(object sender, WorkResumedEventArgs e);
    

    public class WorkProgressEventArgs : CancelEventArgs
    {
        public int ID { get; private set; }
        public int Total { get; private set; }
        public int Completed { get; private set; }
        public string File { get; private set; }       

        public WorkProgressEventArgs(int id, int total, int completed, string file)
        {
            this.ID = id;
            this.Total = total;
            this.Completed = completed;
            this.File = file;
        }
    }

    public class WorkMessageEventArgs : CancelEventArgs
    {
        public int ID { get; private set; }        
        public string Message { get; private set; }

        public WorkMessageEventArgs(int id, string message)
        {
            this.ID = id;
            this.Message = message;
        }
    }

    public class WorkFinishedEventArgs : EventArgs
    {
        public int ID { get; private set; }
        public bool Success { get; private set; }
        public string Message { get; private set; }

        public WorkFinishedEventArgs(int id, bool success, string message)
        {
            ID = id;
            Success = success;
            Message = message;
        }
        public static WorkFinishedEventArgs SuccessArgs(int id) { return new WorkFinishedEventArgs(id, true, "Success"); }
        public static WorkFinishedEventArgs FailedArgs(int id, string message) { return new WorkFinishedEventArgs(id, false, "Error " + message); }
        public static WorkFinishedEventArgs AbortArgs(int id) { return new WorkFinishedEventArgs(id, false, "User Aborted"); }
    }

    public class WorkStartEventArgs : CancelEventArgs
    {
        public int ID { get; private set; }

        public WorkStartEventArgs(int id)
        {
            ID = id;
        }
    }

    public class WorkPausedEventArgs : EventArgs
    {
        public int ID { get; private set; }

        public WorkPausedEventArgs(int id)
        {
            ID = id;
        }

        public static WorkPausedEventArgs PausedArgs(int id) { return new WorkPausedEventArgs(id); }
    }

    public class WorkResumedEventArgs : EventArgs
    {
        public int ID { get; private set; }

        public WorkResumedEventArgs(int id)
        {
            ID = id;
        }

        public static WorkResumedEventArgs ResumedArgs(int id) { return new WorkResumedEventArgs(id); }
    }
    #endregion



    public interface IWork
    {
        int ID { get; }
        string Title { get; }
        DateTime ConstructTime { get; }
        DateTime StartTime { get; }
        WorkType WorkType { get; }

        //Progress
        WorkStatusType WorkStatus { get; }
        WorkResultType WorkResult { get; }
        int Total { get; }
        int Completed { get; }
        int PercentCompleted { get; }
        string ProcessingItem { get; }        
        bool Paused { get; set; }
        bool Aborted { get; }
        string[] ProgressLog { get; }

        ICustomProgressDialog ProgressDialog { get; set; }
        bool IsProgressDialogEnabled { get; set; }

        IWorkLogger Logger { get; set; }

        event WorkProgressEventHandler WorkProgress;
        event WorkMessageEventHandler WorkMessage;
        event WorkStartEventHandler WorkStart;
        event WorkFinishedEventHandler WorkFinished;
        event WorkPausedEventHandler WorkPaused;
        event WorkResumedEventHandler WorkResumed;

        void Start(bool threaded);
        void Abort();
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Founder
Hong Kong Hong Kong

Comments and Discussions