2015-03-02 112 views
0

這個問題以前可能會問到,但我找不到任何適合我需求的解決方案。 我有一個要求,即在WPF應用程序中打印報告,在WPF應用程序中,我使用的是棱鏡模塊化方法。我爲該報告編寫了一個用戶控件,並將其與ViewModel綁定。使用MVVM Prism打印WPF視覺

在打印命令上,我通過使用下面的代碼獲取查看。

var view = ServiceLocator.Current.GetInstance<SalesInvoiceReport>(); 

並使用以下代碼將此視圖傳遞給PrintDialog。

if (pd.ShowDialog() == true) 
{ 
    Size pageSize = new Size(pd.PrintableAreaWidth - 20, pd.PrintableAreaHeight - 20); 

    pd.PrintVisual(view, "A Scaled Drawing"); 

    view.Background = null; 

    view.LayoutTransform = null; 
} 

PrintDialog打印視圖,但其不在報表上顯示任何數據。 我做錯了什麼?據我猜測ViewModel無法正常工作。 我從下面的代碼中得到的想法,因爲我通過這種方式在應用程序中添加視圖。

var view = ServiceLocator.Current.GetInstance<Medicose.Navigation.View.NewOrder>(); 
IRegion region1 = this._regionManager.Regions[RegionNames.MainRegion]; 

region1.Add(view); 
if (region1 != null) 
{ 
    region1.Activate(view); 
} 

但是這裏我不想在區域添加視圖,我希望它直接打印爲報告。請糾正我或給我想法,如果我做錯了。我是新的在開發WPF PRISM應用程序開發。

編輯---

public partial class SalesInvoiceReport : UserControl 
{ 
    public SalesInvoiceReport(Medicose.Navigation.ViewModel.Reports.SalesInvoiceReportViewModel model) 
    { 
     InitializeComponent(); 
     this.DataContext = model; 
    } 
} 

視圖模型....

public sealed class SalesInvoiceReportViewModel:ViewModelBase 
{ 
    #region private members 
    private EntityFContext context; 

    private IProductsService productsservice; 

    private static readonly int orderNumber;............ 
+0

請問如何在創建打印時設置此視圖的'DataContext'。 XAML? DI? – dymanoid 2015-03-02 17:33:10

+0

請檢查編輯的代碼... – Wasif 2015-03-02 19:25:56

+0

我看到您在該視圖中使用依賴注入。 Prism使用哪個IoC容器? MEF/Unity /其他?你有沒有試圖在你的視圖的參數化構造函數中設置一個斷點來檢查它是否真的被調用? – dymanoid 2015-03-02 19:49:52

回答

0

謝謝你們,這是我的錯誤,我無法想象我的事情發生,我的ViewModel實際上構造報告打印被稱爲,但我沒有調用填充報告內容的方法。然而,我對這件事情中發生的其他問題感到困惑,那就是獲取一個OrderId。 我已經做了一個公共靜態字段從NewOrderViewModel獲取訂單號。 NewOrderViewModel具有print命令。我通過在ReportViewModel中創建一個靜態字段來設置訂單ID的值。我正在做這個對或錯?請糾正我的最佳做法,我嘗試使用依賴項屬性,但我無法通過使用dependencyProperty在viewModel獲取值。

B.R