2015-03-02 107 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