WPF从单个视图模型打印多个页面

WPF从单个视图模型打印多个页面,wpf,mvvm,printing,Wpf,Mvvm,Printing,我现在有点被以下问题困扰。我有一个基本上显示图形的用户界面(由线、圆等组成的画布,这些都是WPF对象)。根据用户在菜单中所做的选择,有些项目会被删除,有些项目会被添加。因此,基本图像看起来是一样的,但做了一些修改 用户可以通过单击下一个/上一个按钮来选择-比如-10个不同的“页面” 我使用的是MVVM灯光,我的ViewModel包含图形的所有项目(所有线条,…) 现在,我想将该图形打印到多个页面。第一页应包含第1页更改后的图形,第二页包含第2页更改后的图形,依此类推。实际页数是动态的。我用属性C

我现在有点被以下问题困扰。我有一个基本上显示图形的用户界面(由线、圆等组成的画布,这些都是WPF对象)。根据用户在菜单中所做的选择,有些项目会被删除,有些项目会被添加。因此,基本图像看起来是一样的,但做了一些修改

用户可以通过单击下一个/上一个按钮来选择-比如-10个不同的“页面”

我使用的是MVVM灯光,我的ViewModel包含图形的所有项目(所有线条,…)

现在,我想将该图形打印到多个页面。第一页应包含第1页更改后的图形,第二页包含第2页更改后的图形,依此类推。实际页数是动态的。我用属性CurrentPage和属性PagesTotal来跟踪它。 每当我按下“下一步”按钮时,就会执行一个命令,该命令将更改变量CurrentPage,并确保显示正确的项目

现在我想打印这个,但这是我卡住的地方。我不介意离开MVVM区域,在代码中做一些肮脏的工作,但我拒绝像以前的GDI那样再次绘制所有内容


任何想法都是非常受欢迎的。

创建一个包含显示逻辑的用户控件(例如图形)。抓取ViewModel列表并投影到UserControls中,将每个ViewModel设置为每个UserControls的DataContext。
强制每个人以无穷大的值呈现调用度量值,然后按照结果所需的高度和宽度进行排列。然后按照程序打印WPF视觉效果()。

基本上,如果且仅当您的视图独立工作时,这应该非常简单;i、 e.ViewModel不包含放置在视图中的UiElements

简单的解决方案是基本上打印视觉根。如果需要,首先将视图封装在用户控件中

PrintDialog printDlg = new PrintDialog();
UserControl1 uc = new UserControl1();
printDlg.PrintVisual(uc, "User Control Printing."); 

好的,我必须告诉管理员,我现在切换回只通过代码进行打印。我真的很喜欢“WPF风格”,但处理多页问题太麻烦了


无论如何,关于打印输出仍然存在一个问题,但这将是另一个问题。

假设您可以动态创建视图?您没有在ViewModels中的任何位置存储UIElements?没有,我的ViewModel只包含“普通”对象,没有UI元素。我将ViewModel对象与UIElements分开。UI元素是基于普通列表的DataTemplate呈现的。你给的代码不是只打印一个用户控件吗?因为我想多次打印同一个用户控件(这样的控件通常由大约10000行组成,而每个“页面”只有100行更改)。为了提高速度,我只想保留9900个元素,并交换剩余的100个元素。您可以在父控件中封装任何您喜欢的内容。打印有点棘手,但基本上打印的工作方式就像是在屏幕上渲染一样,这意味着不能在逻辑树中两次使用同一个控件实例。无论您当前在屏幕上呈现的是什么,请使用.print(myWindow)尝试打印。这样做的想法是,与其将所有内容都放在一个窗口中,不如将所有内容都放在一个高大的用户控件中。实际上,我只有一个视图模型,我不想为每个页面创建一个实例,因为这些页面可能会变得相当大(10k+行)。根据您提供的信息,很难猜测您的打印系统当前的工作方式。你不能分享一些示例代码吗?