首先让我先说我不是WPF专家,所以如果我错过了什么,那么我很抱歉。
我正在研究用C#编写的应用程序,WPF使用MVVM模式。我正在研究的是通用报表查看器视图。表单的设计相当简单,组合框控件和带有2个选项卡的选项卡控件。第一个选项卡具有自定义参数控件,第二个选项卡具有WPF Crystal Reports(CR)查看器。
表单的功能也相当简单,当您更改组合框选择时,它会查找相应的CR报告(使用桌面引擎,VS for VS2010)并查询设计参数,然后在选项卡1中显示。用户根据需要填写参数并按下“go”按钮,将参数值传递回报告,执行并将其放入选项卡2的查看器控件中,该控件将被聚焦。
一切都很好,你可以改变组合,重复填写参数和查看报告而不会有任何戏剧性。这个问题更多地出现在“可用性”问题上。
如果您已在CR查看器中选择并查看了报告,则在选择新报告时,您在参数选项卡中具有第二个报告的参数,但第一个报告的预览仍在查看器中,具体取决于对用户而言,可能会令人困惑。
当用户选择新报告时,参数会被聚焦,但我想“清除”CR查看器,我无法弄清楚如何实现这一点。我在后面的View代码中的一个事件中设置了报告,该事件是通过“go”按钮按下ViewModel中的方法调用的。
this.crystalReportsViewer.ViewerCore.ReportSource = this.ViewModel.Report;
但是我尝试过的任何内容都让我清除了报告查看器。
this.crystalReportsViewer.ViewerCore.ReportSource = null;
this.crystalReportsViewer.Content = null;
this.crystalReportsViewer.ViewerCore.Content = null;
this.crystalReportsViewer.ViewerCore.ReportSource = new ReportDocument();
this.crystalReportsViewer = new CrystalReportsViewer();
this.crystalReportsViewer.Owner = Window.GetWindow(this);
我无法关闭并重新打开报告生成尝试之间的视图,并根据需要使控件可见或隐藏,这是一个非常可怕的kludge。
非常感谢任何帮助!