2 番目の質問は、スタンドアロンであるほど複雑であるため、スキップします。
私は同じ問題に直面しましたが、いくつかの異なることが原因である可能性があります。
問題がバインディングがまだ「トリップ」されていないことが原因である場合、解決策は少しハックですが、DataContext 型を制御すれば簡単に実行できます。型にパブリック メソッドまたは内部メソッドを追加するだけで、各パブリック プロパティの PropertyChanged イベントを発生させることができます。次に例を示します。
public interface IForceBinding : INotifyPropertyChanged
{
void ForceBindings();
}
public class MyDataContext : IForceBinding
{
public event PropertyChanged;
private string _text;
public string Text
{
get{return _text;}
set{_text = value; OnPropertyChanged("Text");}
}
public void ForceBindings()
{
OnPropertyChanged("Text");
}
private void OnPropertyChanged(string propertyName)
{
// you know the drill
}
}
次に、次のように使用できます。
public void Print(MyDataContext preconfiguredContext){
var page = new MyWpfPage();
page.DataContext = preconfiguredContext;
preconfiguredContext.ForceBindings();
// write to xps
これが機能しない場合、最初のページのバインディングが表示されないというバグが発生している可能性があります。その解決策を再発見するには、しばらく掘り下げる必要があります。