WPF:一個文檔處理基類 – DocLogic

來源:互聯網
上載者:User

許多軟體都是在處理一個文件類型的資料,當然,這個“文檔”不僅限於文字檔。比如二進位編輯器可以處理原始位元據,Office可以處理複雜的辦公文檔等。雖然文檔本身的內容會不同,但是整個文檔處理的方式都是有非常大的重合的。因此建立了一個叫DocLogic的類型,他把此類文檔處理的相似邏輯進行封裝。它具有如下此類文檔處理常式的常用功能支援:

  1. 定義方法和WPF命令來進行建立,開啟,儲存和另存新檔功能。
  2. 開啟,儲存對話方塊的執行。
  3. 對未儲存文檔的覺察和提示(包括視窗關閉時提示使用者儲存檔案)。
  4. 拖放的支援(使用者將檔案拖放給程式會嘗試開啟這個檔案)。
  5. 所有操作的錯誤輸出。
  6. 將命令綁定到WPF預定義命令中(按Ctrl+O會執行開啟操作,按Ctrl+S會執行儲存操作,按Ctrl+N會執行建立操作)。

 

在樣本程式裡,使用這個類型可以快速建立一個很簡單的記事本程式:

當然,處理的檔案不限於文字檔,我在海棠果工程式控制制台和編輯器中都使用這個類型。

 

使用DocLogic,使用者必須執行它的抽象方法,就比如最簡單的操作文本的DocLogic,我們來看樣本記事本程式的DocLogic衍生類別 - TxtDocLogic的代碼:

//繼承自DocLogic類型

//DocLogic繼承自Mgen Fx17工程中的LogicBase類型(代表ViewModel基類)。

public class TxtDocLogic : DocLogic

{

    //內容是文本

    //注意1:屬性本身是INotifyPropertyChanged的,因為介面上是用綁定來擷取資料的。

    //注意2:屬性改變後需要調用DocLogic.NotifyContentChanged方法,這樣提示DocLogic文檔已改變。

    private string _Content = null;

    public string Content

    {

        get { return _Content; }

        set { RaisePropertyChangedEx(ref _Content, value, () => NotifyContentChanged()); }

    }

 

    //******** 實現返回語言文本相關的方法 ********

    //返回開啟檔案對話方塊的Filter。

    protected override string GetOpenFileFilter()

    {

        return IDOM.FilterOpen;

    }

    //返回儲存檔案對話方塊的Filter。

    protected override string GetSaveFileFilter()

    {

        return IDOM.FilterSave;

    }

    //返迴文檔未儲存的提示文本。

    protected override string GetSaveDialogContent()

    {

        return IDOM.DocSaveCheck;

    }

 

    //清空內容的執行。(發生在使用者選擇建立命令後)

    protected override void ResetContent()

    {

        Content = null;

    }

    //判斷內容是否為空白的執行。

    protected override bool IsContentEmpty()

    {

        return Content.IsNullOrEmpty();

    }

    //從檔案中讀取內容的執行。

    protected override void ReadFromDiskOverride(string path)

    {

        Content = File.ReadAllText(path, Encoding.Default);

    }

    //將內容寫入到檔案中的執行。

    protected override void WriteToDiskOverride(string path)

    {

        File.WriteAllText(path, Content ?? String.Empty, Encoding.Default);

    }

 

}

 

好了,有了DocLogic,主邏輯的代碼就是這麼多。接下來需要做的就是定義介面和處理介面上的其他問題。

介面的定義非常簡單,讀者可以參考下原始碼,只需要把實現的DocLogic的內容和命令綁定到介面上就可以了。DocLogic還提供FilePath屬性返迴文件路徑,HasFile屬性返回是否編輯已開啟的檔案,以及IsContentChanged屬性返迴文件內容是否被改變。

對於命令綁定,DocLogic的四大操作直接定義在四個ICommand屬性中:

同時使用者也可以直接調用DocLogic的New,Open,Save和SaveAs方法來完成上述ICommand定義的執行功能。

 

最後就是介面上其他問題的處理,比如上面講的拖放支援,表單關閉後提示未儲存檔案的支援,和綁定到WPF預定義命令的支援。這些問題之前都其實寫過文章,讀者可以直接參考:

WPF:附加屬性解決MVVM中Window的Closing事件和ViewModel的串連

WPF:MVVM中將預定義命令綁定到ViewModel中的命令中

WPF:附加屬性來解決MVVM中的拖放操作

 

各版本的原始碼下載
下載頁面
注意:連結是微軟SkyDrive頁面,下載時請用瀏覽器直接下載,用某些下載工具可能無法下載
原始碼環境:Microsoft Visual Studio Express 2012 for Windows Desktop
注意:原始碼不包含引用的外部類庫檔案:Mgen Fx17工程 3.2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.