Por que estou perdendo minha ligação de dados ao imprimir em um XpsDocument?

Atualizar!

Trabalhos de encadernação. O problema é que o XpsDocumentWriter não grava corretamente a primeira página do primeiro documento de um FixedDocumentSequence. Esse parece ser um problema encontrado por muitas pessoas que fazem esse tipo de coisa (ou seja, cinco desenvolvedores em todo o mundo). A solução é um pouco estranha. Eu incluo isso como resposta.

Ok, é um pouco mais sutil do que a pergunta sugere.

Eu tenho uma série de FixedPages, cada um com seu DataContext definido individualmente. Cada FixedPage também possui um ou mais controles que estão vinculados ao contexto.

Se eu adicionar essas FixedPages a um único FixedDocument e gravar esse único FixedDocument em um XpsDocument, minhas ligações serão des-referenciadas (por assim dizer) e os valores corretos serão apresentados no XpsDocument.

Se eu adicionar essas FixedPages a FixedDocuments individuais (cada FP é adicionado a um novo FD), esses FixedDocuments serão adicionados a uma FixedDocumentSequence e essa sequência será gravada no XpsDocument, meus binds NÃO serão desassistidos e minhas FixedPages aparecerão em branco .

A depuração me diz que não estou perdendo minhas ligações ou meu contexto, então essa não é a causa dessa falha.

Aqui está um código de exemplo para ilustrar o que está acontecendo:

// This works
FixedPage fp = CreateFixedPageWithBinding();
fp.DataContext = CreateDataContext();
// Add my databound fixed page to a new fixed document
var fd = new FixedDocument();
var pc = new PageContent();
((IAddChild)pc).AddChild(fp);
fd.Pages.Add(pageContent);
// Create an xps document and write my fixed document to it
var p = Package.Open("c:\\output.xps", FileMode.CreateNew);
var doc = new XpsDocument(p);
var writer = XpsDocument.CreateXpsDocumentWriter(doc);
wri2.Write(fd);
p.Flush();
p.Close();

// This does NOT work
FixedPage fp = CreateFixedPageWithBinding();
fp.DataContext = CreateDataContext();
// Add my databound fixed page to a new fixed document
var fd = new FixedDocument();
var pc = new PageContent();
((IAddChild)pc).AddChild(fp);
fd.Pages.Add(pageContent);
// Create a fixed document sequence and add the fixed document to it
FixedDocumentSequence fds = CreateFixedDocumentSequence();
var dr = new DocumentReference();
dr.BeginInit();
dr.SetDocument(fd);
dr.EndInit();
(fds as IAddChild).AddChild(dr);
// Create an xps document and write the fixed document sequence to it
var p = Package.Open("c:\\output.xps", FileMode.CreateNew);
var doc = new XpsDocument(p);
var writer = XpsDocument.CreateXpsDocumentWriter(doc);
wri2.Write(fds);
p.Flush();
p.Close();

Você pode ver que a única diferença entre os dois é que estou adicionando o documento fixo a uma sequência de documentos fixa, que é gravada.

Obviamente, qualquer mágica que aconteça que faça com que a ligação de dados seja avaliada e os valores vinculados sejam inseridos não estará acontecendo quando meus documentos fixos não estiverem sendo gravados no documento Xps. Eu preciso ser capaz de escrever mais de um documento fixo, e o método Write pode ser chamado apenas uma vez, exigindo, portanto, a adição de FixedDocuments a um FixedDocumentSequence que, em seguida, escrevo. Mas euAlém disso preciso da minha maldita ligação de dados para funcionar também!

Qualquer ajuda nessa situação seria apreciada. Eu sei que não é exatamente a parte mais comum da estrutura; Só espero que alguém aqui tenha alguma experiência operacional com isso (estou olhando para você, espreitando um funcionário da MS).

questionAnswers(3)

yourAnswerToTheQuestion