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

时间:2013-03-01 16:26:52

标签: wpf mvvm printing

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

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

我正在使用MVVM Light,我的ViewModel包含图形的所有项目(所有行,......)。

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

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

任何想法都非常受欢迎。

3 个答案:

答案 0 :(得分:1)

创建一个包含显示逻辑的UserControl(例如,图形)。然后在UserControls中获取ViewModel列表和项目,将每个ViewModel设置为每个UserControl的DataContext。 强制每个渲染调用具有无限值的Measure,然后使用生成的DesiredHeight和Width进行排列。然后按照步骤打印WPF视觉效果(link link link)。

答案 1 :(得分:1)

基本上,当且仅当您的观点独立工作时,这应该非常简单;即您的ViewModel不包含放置在View中的UiElements。

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

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

Reference

答案 2 :(得分:0)

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

无论如何,关于打印输出还有一个问题,但这将是另一个问题。