V Silverlight (ale stejně to bude i ve WPF) řeším následující problém. Ve stringu MemberPath mám zadanou cestu vlastností nějakého objektu (jedná se o string co se zadává do Path binding výrazu nebo například do vlastnosti DisplayMemberPath ComboBoxu). Může tam být i více vlastností než jedna například tedy "Osoba.PracovniKalendar.Nazev". Potřebuju kódem načíst hodnotu podle toho MemberPath z konkrétní instance objektu. Nyní to řeším následujícím kódem přes pomocný control ContentPresenter a binding na vlastnost Content:
private static object GetItemValue(object item, string memberPath)
{
var contentPresenter = new ContentPresenter();
var binding = new System.Windows.Data.Binding(memberPath) { Source = item };
contentPresenter.SetBinding(ContentPresenter.ContentProperty, binding);
return contentPresenter.Content;
}
Tento kód se mi ale moc nelíbí, protože to vytváření controlu mi přijde trochu jako "prasárna". Neví někdo o nějaké lepší řešení jak načíst požadovanou hodnotu.
|