Я использую шаблон M-V-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, я всегда получаю нулевой документ. При отладке привязки это выглядит как проблема синхронизации в том, что присоединенное свойство получает правильное значение после запуска расширения разметки.
Можно ли как-нибудь заставить это работать?