有没有方法将包含绑定表达式的字符串转换为绑定对象?
一个简单的例子是"{Binding Path}"
,
或者:
"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=views:IPage}, Path=TensileTestChange}"
实际的绑定表达式存储在XML中,这是XAML文档的更高级别表示。
string myBindingExpression = "{Binding MyProperty}";
var test = "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Text=\""
+ myBindingExpression + "\" />";
var result = XamlReader.Parse(test) as TextBlock;
var bindingExpression = result.GetBindingExpression(TextBlock.TextProperty);
Binding binding = bindingExpression.ParentBinding
这将创建一个带有绑定作为 Text 属性的 TextBlock。它将返回绑定对象,并根据绑定表达式设置属性。
然后您可以在任何地方应用该绑定。
请记住,对于具有 xmlns 前缀的更复杂示例,您需要在虚拟的 TextBlock 中包含 xmlns:views="..."
,否则它将不知道如何处理前缀。
示例:<TextBlock xmlns:views="..." xmlns="..." Text="{Binding MyProperty}" />
Binding
构造函数,它接受一个字符串作为参数。 - Patryk ĆwiekBinding
,所以我个人能做的最好的就是引用Binding
类,它包含了你需要的所有属性 - 实际上它是在XAML中使用的相同绑定。我不知道你是否可以以某种预定义的字符串方式传递它,或者你是否需要首先解析该字符串(这将是适得其反的)。 - Patryk Ćwiek