.net 在对flowdocument进行分页时保留绑定

.net 在对flowdocument进行分页时保留绑定,.net,wpf,.net-4.0,reporting,.net,Wpf,.net 4.0,Reporting,我一直在尝试在.NET 4的WPF中构建一个简单的报告和打印系统,经过无数个小时的拖网和各种在线教程,我有了以下(简化的)设置,该设置应该包含一个包含报告模板的flowdocument,添加一个数据源作为datacontext,将它分页,最后得到可以显示/打印的内容 报告在单独的内容文件(DefaultReport.xaml)中的flowdocument中列出: 这是按如下方式加载和组合的: using (var stream = File.OpenRead("DefaultReport.xam

我一直在尝试在.NET 4的WPF中构建一个简单的报告和打印系统,经过无数个小时的拖网和各种在线教程,我有了以下(简化的)设置,该设置应该包含一个包含报告模板的flowdocument,添加一个数据源作为datacontext,将它分页,最后得到可以显示/打印的内容

报告在单独的内容文件(DefaultReport.xaml)中的flowdocument中列出:

这是按如下方式加载和组合的:

using (var stream = File.OpenRead("DefaultReport.xaml")) {
    FlowDocument document = (FlowDocument)XamlReader.Load(stream);                
    document.DataContext = new MyDataContext { MyText = "2" };

    flowReader.Document = document;           

    XpsDocument xpsDoc = LoadAsXPS(((IDocumentPaginatorSource)document).DocumentPaginator);
    fixedReader.Document = xpsDoc.GetFixedDocumentSequence();
    xpsDoc.Close();
}
LoadAsXPS将流程文档转换为XPS文档,如下所示:

public XpsDocument LoadAsXPS(DocumentPaginator paginator) {
     MemoryStream stream = new MemoryStream();
     Package docPackage = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite);

     Uri uri = new Uri(@"memorystream://myXps.xps");
     PackageStore.AddPackage(uri, docPackage);
     XpsDocument xpsDoc = new XpsDocument(docPackage);

     xpsDoc.Uri = uri;
     XpsDocument.CreateXpsDocumentWriter(xpsDoc).Write(paginator);

     return xpsDoc;
 }
flowReader和fixedReader输出整个操作的结果,并在xaml中定义为

 <FlowDocumentReader Name="flowReader" />
 <DocumentViewer Margin="0,10,0,0" Name="fixedReader" /> 

最终结果如下:

上半部分是我用于调试的FlowDocumentReader。这里一切都很好。 下半部分是包含分页文档的DocumentViewer,这是我正常工作所需的


如何在分页过程中准确地保存绑定数据?

设置悬赏10分钟后,我就知道了。数字

显然,在分配flowdocument datacontext之后,dispatcher需要一点推动,以使事情继续进行:

this.Dispatcher.Invoke(DispatcherPriority.SystemIdle, new Action(() => { }));

我也有同样的问题,你能告诉我你在代码中添加这一行的确切位置吗?我正在使用DocumentViewer。谢谢你,三年半过去了,我简直不记得了。根据我的回答,它一定在document.DataContext=newmydatacontext{MyText=“2”}之后;感谢Manos,尽管对我来说它仍然不起作用:-(这对我来说起作用了,我在设置数据上下文之后立即调用了dispatcher:
document.DataContext=DataContext;Application.Current.dispatcher.Invoke(DispatcherPriority.SystemIdle,new Action(()=>{}));
 <FlowDocumentReader Name="flowReader" />
 <DocumentViewer Margin="0,10,0,0" Name="fixedReader" /> 
this.Dispatcher.Invoke(DispatcherPriority.SystemIdle, new Action(() => { }));