【发布时间】:2015-03-02 15:17:24
【问题描述】:
之前可能会问过这个问题,但我找不到任何适合我要求的解决方案。 我需要在 WPF 应用程序中打印报告,在 WPF 应用程序中我使用 Prism Modular 方法。我已经为报表编写了一个用户控件并将其与 ViewModel 绑定。
在打印命令上,我使用以下代码获取视图。
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;............
【问题讨论】:
-
请发布您如何设置此视图的
DataContext,当您创建它以进行打印时。 XAML? DI? -
请检查编辑的代码...
-
我看到您在该视图中使用了依赖注入。您将哪个 IoC 容器与 Prism 一起使用? MEF/团结/其他?您是否尝试在视图的参数化构造函数中设置断点以检查它是否实际被调用?
-
我正在使用 Prism Unity..并且我已经在 Viewmodel 构造函数和 UserControl 的构造函数中设置了断点,两个构造函数都在调用但 datacontext 不起作用,我认为这个视图没有激活,怎么能无需添加任何区域即可激活此功能?是否可能(我不确定),但我认为 Region 是激活任何视图所必需的。
标签: c# wpf mvvm reporting prism