2016-10-26 40 views
1

我試圖找出使用自定義模板文件從WPF應用程序中導出數據的最佳方法,但儘管搜索小時數已經繪製爲空白。如何使用自定義模板文件導出數據

的場景如下:

我們對公司內部使用WPF MVVM應用程序和畫面之一是生成發票。有一個選項可導出到此視圖上的Word文檔,該視圖當前使用ViewModel中的各種硬編碼字符串文字實現,遠非理想。

目前的設置確實有效,但對我來說並不合適,我想改進它。我們還有一個新的要求來添加不同類型的發票,所以我藉此機會整理了一些東西。

導出過程當前包括創建一個HTML文檔作爲字符串,然後將其插入到Word文檔中。這樣做可能有更好的方法,但這不在這個問題的範圍內,如果最終輸出是HTML,那麼同樣的問題就會適用。爲了簡單起見,我們只需要說我們對任何類型的導出文件都感興趣,這些文件可以表示爲一個字符串,並且不包含多行數據等動態佈局,例如我們只是對字符串進行查找/替換。

我想這樣做:含佔位符

  • 指定查看哪個模板(S)使用
  • 注入數據模板(S)

    • 創建自定義模板文件使用ViewModel中的數據

    這是正確的方式去做這件事嗎?如果不是,那麼更好的選擇是什麼?

    模板文件應存儲在哪裏?我認爲他們將是WPF應用程序中的資源。

    應該在哪裏進行模板操作/數據注入?我最初假定一個字符串會被加載到ViewModel中,並且這會執行操作,但是也許有更好的方法來處理View中的數據。

    畢竟,讓我們繼續討論實際問題!

    問題:

    對於可以表示爲一個字符串任何給定的出口文件類型,什麼是存儲模板在WPF MVVM和注入數據的最佳方式?

  • +0

    你有沒有想過XML? – Aybe

    +0

    @你是不是指用一個XML文件以結構化的方式存儲不同的模板文件?這是一種可能性,但如果ViewModel中的這個XML文件是View的一部分,我該如何訪問這個XML文件仍然會遇到同樣的問題? – nickyjim

    回答

    0

    嘗試並無法將視圖中的文件數據傳遞給ViewModel後,我最終傳遞了文件路徑。該路徑然後由ViewModel用於加載模板並注入數據。這並不完全是我最初瞄準的目標,但確實有效,並且具有能夠在視圖中指定文件路徑的優點,從而使其不在ViewModel中。

    由於顯示嵌入式圖像的Word問題,我還使用.docx文件作爲模板而不是.html。該模板文件包含在帶有內容生成操作的WPF項目中。

    查看XAML:

    <Label Content="{Binding Path=InvoiceTemplateFile, FallbackValue='\\Templates\\Invoice\\InvoiceTemplate.docx', Mode=OneWayToSource}" Visibility="Collapsed" /> 
    

    視圖模型屬性:

    private string _invoiceTemplateFile; 
        public string InvoiceTemplateFile 
        { 
         get { return _invoiceTemplateFile; } 
         set 
         { 
          if (value == _invoiceTemplateFile) 
           return; 
    
          _invoiceTemplateFile = value; 
    
          base.OnPropertyChanged("InvoiceTemplateFile"); 
         } 
        } 
    

    訪問文件路徑視圖模型:

    string templateFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.InvoiceTemplateFile); 
    

    我接受什麼更好的建議!

    相關問題