[英]WPF parse binding expression
有沒有辦法將包含綁定表達式的字符串轉換為Binding對象?
一個簡單的例子是"{Binding Path}"
,
要么:
"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=views:IPage}, Path=TensileTestChange}"
實際綁定表達式存儲在XML中,XML是XAML文檔的更高級別表示。
你要問的是解析MarkupExtension
。 我無法直接找到WPF的實現(它包含在XamlReader.Parse
調用鏈中的某個位置)。
經過一些谷歌搜索后,似乎沒有現成的解決方案可以做到這一點。 但是,如果你有編寫解析器的經驗,你可以自己動手。 解析MarkupExtension的規范在MSDN上給出。
作為一種解決方法,您可以偽裝一個控件放在哪里綁定:
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
這將創建一個TextBlock,其綁定為Text屬性。 它將為您提供具有根據綁定表達式設置的屬性的綁定對象。
然后,您可以在任何地方應用綁定。
但請記住,對於使用xmlns前綴的更復雜的示例,您需要在偽造的TextBlock
包含xmlns:views="..."
,否則它將不知道如何處理前綴。
示例: <TextBlock xmlns:views="..." xmlns="..." Text="{Binding MyProperty}" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.