MV-VMパターンを使用しています
私のVMには次のようなコードがあります
public class ViewModel {
public XmlDocument Document { ... }
....
}
上記のドキュメントを使用したいマークアップ拡張機能があります
public override object ProvideValue(IServiceProvider serviceProvider) {
IProvideValueTarget valueProvider = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
if (valueProvider != null) {
DependencyObject target = valueProvider.TargetObject as DependencyObject;
XmlDocument doc = Foo.GetDocument(target);
if (doc != null) {
var n = doc.SelectSingleNode("/.../text()");
if (n != null) return n.Value;
}
}
return "«" + ObjectProperty + "»";
}
添付プロパティ Foo.Document を作成し、それをページに添付しました (ページの DataContext は ViewModel クラスのインスタンスに設定されます)。
<Page ... lc:Foo.Document="{Binding Document}">
...
</Page>
(マークアップ拡張機能を使用するたびにパラメーターとして入力する必要がないようにするため)
現在、マークアップ拡張機能で Document 添付プロパティを読み取ろうとすると、常に null ドキュメントが取得されます。バインドをデバッグすると、マークアップ拡張機能の実行後に添付プロパティが適切な値を取得するタイミングの問題のように見えます。
これを何らかの形で機能させることは可能ですか?