2013-06-03 30 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

这意味着你是免费的家!如果有问题,所有最好的和呐喊。 –

相关问题