我正在使用 MV-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 附加属性时,我总是得到一个空文档。通过调试绑定,在运行标记扩展后,附加属性会获得正确的值,这似乎是一个计时问题。
有可能让它以某种方式工作吗?