簡體   English   中英

WPF解析綁定表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM