首先让我说我绝不是 WPF 专家,所以如果我遗漏了什么,那么我很抱歉。
我正在开发一个用 C# 编写的应用程序,其中 WPF 使用 MVVM 模式。我正在研究的是一个通用的报表查看器视图。表单的设计相当简单,一个组合框控件和一个带有 2 个选项卡的选项卡控件。第一个选项卡具有自定义参数控件,第二个选项卡具有 WPF Crystal Reports (CR) 查看器。
表单的功能也相当简单,当您更改组合框选择时,它会查找适当的 CR 报告(使用桌面引擎,对于 VS2010 的 CR)并查询设计以获取然后显示在选项卡 1 中的参数。用户填写根据需要在参数中输入并按下“开始”按钮,该按钮将参数值传递回报告,执行并将其放入选项卡 2 上的查看器控件中,该选项卡被聚焦。
一切都很好,您可以更改组合,填写参数并反复查看报告,而不会发生任何戏剧性事件。这个问题更多地是一个“可用性”问题。
如果您已经在 CR 查看器中选择并查看了一个报告,当您选择一个新报告时,您在参数选项卡中拥有第二个报告的参数,但第一个报告的预览仍在查看器中,具体取决于用户,可能会令人困惑。
当用户选择一个新报告时,参数是集中的,但我想“清除”CR 查看器,我不知道如何实现这一点。我在 View 代码中的一个事件中设置了报告,该事件是通过按下“开始”按钮从 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);
我无法在报告生成尝试之间关闭并重新打开视图,并且根据需要使控件可见或隐藏是一个可怕的问题。
任何帮助将不胜感激!