Обновление!
Переплетные работы. Проблема в том, что XpsDocumentWriter неправильно записывает первую страницу первого документа FixedDocumentSequence. Похоже, что это проблема, с которой сталкиваются многие люди, занимающиеся подобными вещами (то есть пять разработчиков по всему миру). Решение немного странно. Я включаю это как ответ.
Хорошо, это немного более тонко, чем предполагает вопрос.
У меня есть серия FixedPages, каждый из которых имеет свой DataContext, установленный индивидуально. Каждый FixedPage также имеет один или несколько элементов управления, которые связаны с контекстом.
Если я добавлю эти FixedPages в один FixedDocument и запишу этот единственный FixedDocument в XpsDocument, мои привязки будут разыменованы (так сказать), и правильные значения будут представлены в XpsDocument.
Если я добавлю эти FixedPages в отдельные FixedDocuments (каждый FP будет добавлен в новый FD), то эти FixedDocuments будут добавлены в FixedDocumentSequence, и эта последовательность будет записана в XpsDocument, мои привязки НЕ разыменовываются, и мои FixedPages отображаются пустыми.
Отладка говорит мне, что я не теряю свои привязки или контекст привязки, так что это не является причиной этой ошибки.
Вот пример кода для иллюстрации происходящего:
// 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();
Вы можете видеть, что единственное различие между ними заключается в том, что я добавляю фиксированный документ в фиксированную последовательность документов, которая затем записывается.
Очевидно, что какая бы магия ни происходила, что приводит к оценке привязки данных и вставке связанных значений, не происходит, когда мои фиксированные документы не записываются в документ Xps. Мне нужно иметь возможность писать более одного фиксированного документа, и метод Write можно вызывать только один раз, поэтому мне нужно добавить FixedDocuments в FixedDocumentSequence, которую я затем пишу. Но мне также нужна моя проклятая привязка данных, чтобы работать!
Любая помощь в этой ситуации будет принята с благодарностью. Я знаю, что это не самая распространенная часть структуры; Я просто надеюсь, что кто-то здесь имеет некоторый опыт работы с этим (я смотрю на вас, скрывающийся сотрудник MS).