Warum verliere ich meine Datenbindung beim Drucken auf einem XpsDocument?

8

Aktualisieren!

Bindung funktioniert. Das Problem ist, dass der XpsDocumentWriter die erste Seite des ersten Dokuments einer FixedDocumentSequence nicht ordnungsgemäß schreibt. Dies scheint ein Problem zu sein, auf das viele Leute stoßen, die dies tun (d. H. Fünf Entwickler weltweit). Die Lösung ist etwas seltsam. Ich schließe es als Antwort ein.

Okay, es ist etwas subtiler als die Frage vermuten lässt.

Ich habe eine Reihe von FixedPages, jeder hat seinen DataContext einzeln gesetzt. Jede FixedPage verfügt auch über ein oder mehrere Steuerelemente, die an den Kontext gebunden sind.

Wenn ich diese FixedPages zu einem einzelnen FixedDocument hinzufüge und dieses einzelne FixedDocument in ein XpsDocument schreibe, werden meine Bindungen de-referenziert (sozusagen) und die korrekten Werte werden im XpsDocument präsentiert.

Wenn ich diese FixedPages zu einzelnen FixedDocuments hinzufüge (jedes FP wird zu einem neuen FD hinzugefügt), dann werden diese FixedDocuments zu einer FixedDocumentSequence hinzugefügt, und diese Sequenz wird dann in das XpsDocument geschrieben, meine Bindungen werden NICHT referenziert und meine FixedPages erscheinen leer.

Das Debugging sagt mir, dass ich meine Bindungen oder meinen Bindungskontext nicht verliere, also ist das nicht der Grund für diesen Fehler.

Hier ist ein Beispielcode, um zu veranschaulichen, was vor sich geht:

%Vor%

Sie können sehen, dass der einzige Unterschied zwischen den beiden ist, dass ich das feste Dokument zu einer festen Dokumentsequenz hinzufüge, die dann geschrieben wird.

Offensichtlich passiert, was magisch passiert, dass die Datenbindung ausgewertet wird und die gebundenen Werte eingefügt werden, geschieht nicht, wenn meine fixierten Dokumente nicht in das Xps-Dokument geschrieben werden. Ich muss in der Lage sein, mehr als ein festes Dokument zu schreiben, und die Write-Methode kann nur einmal aufgerufen werden, so dass ich die FixedDocuments zu einer FixedDocumentSequence hinzufügen muss, die ich dann schreibe. Aber ich brauche auch meine verdammte Datenbindung!

Jede Hilfe in dieser Situation wäre willkommen. Ich weiß, es ist nicht gerade der häufigste Teil des Rahmens; Ich hoffe nur, dass jemand hier einige operative Erfahrung damit hat (ich schaue dich an, lauert MS-Mitarbeiter).

    
Will 15.01.2009, 23:54
quelle

3 Antworten

9

Die Ursache dieses Fehlers besteht darin, dass das Layout von FixedPage vor dem Schreiben nicht aktualisiert wird. Das verursacht, dass die erste FixedPage in dem ersten FixedDocument in der FixedDocumentSequence falsch geschrieben wird. Dies wirkt sich auf KEINE ANDEREN SEITEN IN DEM ERGEBNISDOKUMENT aus, wodurch es schwieriger wurde, diesen Bug / Edge-Fall zu beheben.

Die folgenden WORKS (umgeschriebene Version des nicht funktionierenden Beispiels):

%Vor%     
Will 16.01.2009, 16:51
quelle
0

Ein Grund dafür, dass Sie eine Bindung verlieren, ist, dass Sie irgendwo eine Ausnahme auslösen - leider wird diese Ausnahme stillschweigend verschluckt und Ihre Bindung funktioniert einfach nicht mehr. Aktivieren Sie die Ausnahmen der ersten Chance und sehen Sie, ob etwas getroffen wird.

    
Paul Betts 16.01.2009 03:05
quelle
0

Ich habe dieses Problem beim Versuch gefunden, XpsDocumentWriter zu verwenden, um in ein PrintQueue zu schreiben. Der folgende Code druckt die erste Seite korrekt.

%Vor%

Wenn Sie printDialog.ShowDialog() entfernen und einfach versuchen, den Standarddrucker drucklos zu drucken, wird die erste Seite falsch gedruckt. In meinem Szenario musste ich jedoch kein FixedDocumentSequence verwenden, also tauschte ich es für nur ein einziges FixedDocument aus und das stille Drucken funktionierte. Ich habe versucht, das Layout auf dem FixedPage ohne Erfolg zu aktualisieren. Seltsam, wie die erste Seite gut gedruckt wird, wenn ich den Druckdialog aber zeige.

    
Caleb S 28.11.2017 22:48
quelle