2010-12-10 160 views
0

有沒有一種簡單的方法來確定一個域對象的屬性是否綁定到WPF元素,如果是,哪個元素和屬性?WPF:查找綁定域對象屬性

例如,假設我有一個帶有TextBox的UserControl,並且將控件的「Text」屬性綁定到我的域對象的「Description」屬性。只給出域對象屬性的名稱(「描述」),如何檢索該屬性的BindingExpression?

+0

從域對象的上下文或從用戶控件的上下文? – 2010-12-10 17:44:08

回答

1

不,沒有簡單的方法來做到這一點。綁定不起作用,你的屬性可以綁定到多個元素的多個依賴屬性,並不知道它。您基本上必須遍歷VisualTree,枚舉每個FrameworkElement的依賴屬性,獲取BindingExpressions並比較Binding的路徑以查看它是否與您正在搜索的屬性名稱相匹配。除此之外,您還必須將DataContext與該對象進行比較。我仍然可以想到許多情況下會失敗,例如Path並不總是用在綁定中,你可以直接使用DataContext。

無論如何,這裏是一個link與一個實際上這樣做的實現。我試了一下,它的工作原理,但只需要一個包含4列和10行的DataGrid完成搜索大約需要2秒鐘。它雖然沒有執行DataContext檢查,但我將其添加到了我的測試應用程序中,但我不會發布代碼,因爲我不認爲你會使用它。無論如何,如果你想要它,請告訴我,我會發布它。

+0

我希望這不是唯一的選擇;我至少希望通過使用FrameworkElement.GetLocalValues來檢索僅設置了值的屬性,但希望通過這種方式來加快進程速度,但正如你所說,這不會特別有效。 – 2010-12-14 17:13:55

+0

@馬丁羅賓斯:我需要一些類似的東西。如果你找到了更好的(甚至是最優化的)方法,那麼一定要更新 – 2010-12-14 18:14:03