我们正在为运行时的一个元素(XamlReader.Load)加载一些xaml用于某些预览目的。不用多说,属性/绑定不知道,因为它们可以在我们加载的元素/控件之间变化。
由于运行时视图模型上下文在加载预览控件时不可用 - 加载元素后,想法是获取绑定信息,在运行时创建具有这些属性的类型,以指定相同的加载控件的数据上下文。
我们将使用AssemblyBuilder / ModuleBuilder / TypeBuilder在运行时构建一个类型。话虽如此,我们需要走可视树来识别所涉及的绑定,以创建绑定路径列表。
显然,一种方法是使用正则表达式直接解析xaml并构建此列表。只是想知道一种存在的方式,以便我可以从可视树本身获取绑定和相关路径?
由于
答案 0 :(得分:0)
为什么不只是走Silverlight Visual Tree并为每个元素调用所有DP的GetBindingExpression()?
答案 1 :(得分:0)
您无法轻易地从可视树中枚举绑定本身。主要的showstopper是FrameworkElement
没有提供枚举使用SetBinding
方法应用的绑定的方法。
为了发现在FrameworkElement上设置的绑定,您需要发现可能已设置或未设置的可能DependencyProperties集,然后尝试使用GetBindingExpression
检索每个DependencyProperties。要发现DependencyProperties集,需要在FrameworkElement的实际类型上使用一些反射代码。
更可能的替代方法是将XAML加载到XDocument中,然后可以使用一些LINQ来发现以"{Binding"
开头的所有属性。但是,是的,这将是RegEx解析属性值的情况(除非你想做一些我甚至不会提到的真正疯狂的事情)。