C# WPF解析绑定表达式
有没有办法将包含绑定表达式的字符串转换为绑定对象 一个简单的例子是C# WPF解析绑定表达式,c#,.net,wpf,binding,C#,.net,Wpf,Binding,有没有办法将包含绑定表达式的字符串转换为绑定对象 一个简单的例子是“{Binding Path}” 或: “{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=views:IPage},Path=TensileTestChange}” 实际的绑定表达式存储在XML中,XML是XAML文档的高级表示形式。您要求的是解析标记扩展名。我无法直接找到WPF的实现(它包含在XamlReader.Parse调用链的某个
“{Binding Path}”
或:
“{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=views:IPage},Path=TensileTestChange}”
实际的绑定表达式存储在XML中,XML是XAML文档的高级表示形式。您要求的是解析
标记扩展名。我无法直接找到WPF的实现(它包含在XamlReader.Parse
调用链的某个地方)
在谷歌搜索了一段时间后,似乎没有现成的解决方案可以做到这一点。但是,如果您有编写解析器的经验,您可以自己编写。上给出了解析MarkupExtension的规范
作为一种解决方法,您可以在放置绑定的位置伪造控件:
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
string myBindingExpression=“{Binding MyProperty}”;
var检验=”;
var result=XamlReader.Parse(test)as TextBlock;
var bindingExpression=result.GetBindingExpression(TextBlock.TextProperty);
Binding Binding=bindingExpression.ParentBinding
这将创建一个以绑定作为文本属性的TextBlock。它将为您提供具有根据绑定表达式设置的属性的绑定对象
然后,您可以在任何地方应用绑定
但是请记住,对于使用xmlns前缀的更复杂示例,您需要在伪TextBlock
中包含xmlns:views=“…”
,否则它将不知道如何使用前缀
示例:
您可以查看Hi@Trustme-I'maDoctor,我已经用另一个我需要实现的示例进行了扩展。我以前从未实际使用过原始绑定
,因此我个人能做的最好的事情就是将您引用到该类,该类包含您需要的所有属性-事实上,它与XAML中使用的绑定相同。我不知道您是否可以通过某种方式传递一个预定义的字符串,或者您是否必须首先解析该字符串(这会产生反作用)。谢谢。不幸的是,我已经使用了原始绑定类。在我的问题中,我想知道是否有现成的解决方案来解析绑定表达式并返回一个绑定对象,也许在这里会有所帮助…?谢谢Bas,很高兴知道它被称为MarkupExtension,我找不到正确的术语!我也会记住关于xmlns的评论,谢谢!