87 lines
2.3 KiB
C#
87 lines
2.3 KiB
C#
|
|
using System.ComponentModel;
|
|||
|
|
using System.Windows.Controls;
|
|||
|
|
using Microsoft.Web.WebView2.Core;
|
|||
|
|
using SSPCTester.UI.ViewModels;
|
|||
|
|
|
|||
|
|
namespace SSPCTester.UI.Views;
|
|||
|
|
|
|||
|
|
public partial class ReportView : UserControl
|
|||
|
|
{
|
|||
|
|
private ReportViewModel? _viewModel;
|
|||
|
|
|
|||
|
|
public ReportView()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
DataContextChanged += (_, e) =>
|
|||
|
|
{
|
|||
|
|
if (_viewModel != null)
|
|||
|
|
_viewModel.PropertyChanged -= ViewModel_PropertyChanged;
|
|||
|
|
|
|||
|
|
_viewModel = e.NewValue as ReportViewModel;
|
|||
|
|
if (_viewModel != null)
|
|||
|
|
{
|
|||
|
|
_viewModel.PropertyChanged += ViewModel_PropertyChanged;
|
|||
|
|
NavigatePreview(_viewModel.PreviewSource);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
NavigateBlank();
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
Unloaded += (_, _) =>
|
|||
|
|
{
|
|||
|
|
if (_viewModel != null)
|
|||
|
|
_viewModel.PropertyChanged -= ViewModel_PropertyChanged;
|
|||
|
|
_viewModel = null;
|
|||
|
|
NavigateBlank();
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.PropertyName == nameof(ReportViewModel.PreviewSource) && sender is ReportViewModel vm)
|
|||
|
|
NavigatePreview(vm.PreviewSource);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void PdfPreview_CoreWebView2InitializationCompleted(
|
|||
|
|
object? sender,
|
|||
|
|
CoreWebView2InitializationCompletedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.IsSuccess) return;
|
|||
|
|
|
|||
|
|
if (DataContext is ReportViewModel vm)
|
|||
|
|
vm.PreviewUnavailable("PDF 预览初始化失败。请确认已安装 Microsoft Edge WebView2 Runtime,或使用“打开文件夹”查看报告。");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void NavigatePreview(Uri? source)
|
|||
|
|
{
|
|||
|
|
if (source == null)
|
|||
|
|
{
|
|||
|
|
NavigateBlank();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
PdfPreview.Source = source;
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{
|
|||
|
|
NavigateBlank();
|
|||
|
|
_viewModel?.PreviewUnavailable("PDF 预览加载失败。请使用“打开文件夹”查看报告。");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void NavigateBlank()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
PdfPreview.Source = new Uri("about:blank");
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{
|
|||
|
|
// WebView2 may not be initialized yet; leave it untouched.
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|