2013-06-03 67 views
1

我試圖綁定到數據綁定(理想情況下來自XAML,因爲我知道如何在後面的代碼中執行此操作,但它遠遠不是微不足道的遍歷我沉重的模板樹那),以誰的名字我只知道在運行時 我想什麼做的一個屬性是不平常:通過變量名綁定到一個屬性(理想的來自xaml)

Content="{Binding TheProperty}" 

但像

Content="{Binding PropertyName=TheNameIsStoredInThisProperty}" 

我想這樣做,因爲我在綁定到我的插件時從模板生成UI,但指定了UI在一組POCO中並與ViewModel分開,所以我希望能夠生成我的UI,並且仍然能夠將它連接到ViewModel上的正確屬性,任何建議都是非常受歡迎的。

+0

我有同樣的問題。你在使用Unity嗎?我問,因爲最近發佈的Unity允許您將INotifyPropertyChanged添加到POCO,而不會干擾POCO中的任何代碼或向其添加任何內容。事實上,POCO完全沒有意識到這一點。使用Unity,虛擬機獲取更改通知,並可以通過自己的PropertyChanged更新UI。 –

+0

沒有不使用Unity,只使用我自己的代碼,我只需要一個通用的方法來綁定到一個屬性,我只知道在運行時從XAML –

+0

足夠公平的屬性,你是否考慮綁定到任意屬性和使用IValueConverter Convert/ConvertBack用一些Reflection來調用命名屬性的值? –

回答

1

直接的解決方案可能是綁定到虛擬機中的任意屬性,使用IValueConverter,它可以同時使用兩種方式,ConverterParameter是包含源屬性名稱的字符串。一旦進入價值轉換器,您可以使用攔截模式來反映出POCO需要的值。然後,您可以將該值傳遞給VM中的源屬性。相當於一個管道:)這將工作,但仍然讓您在POCO更改時收到通知。

標記擴展似乎是合理的,但可能是脆弱的,並且在性能改進方面沒有提供。

附加行爲仍然讓您不得不反思並且不輕易解決源自POCO的通知問題(僅AFAIK Unity知道如何做到這一點)。

+0

只是爲了清除INotifyPropertyChanged /通知根本不是問題(POCO層次結構從不改變,這是一次性的事情,但我想描述那些描述compnent樹的poco,其中組件綁定到實際視圖模型) –

+0

因此, ValueConverter的方式有效,但Unity註釋並非真正與問題相關 –

+0

這意味着你是免費的家!如果有問題,所有最好的和吶喊。 –

相關問題