2012-11-12 86 views
3

我会尽力解释它的情况:动态选择实体属性?

我有一个WPF应用程序,我使用MVVM模式。所以代码至少分为三个“层”。现在,GUI是通过放置在外部XML文件中的可定制定义动态构建的。例如,在这个XML文件中,Grid的每一行以及它的含义和布局都被定义了。以及它应该从数据源的表中读取的列。顺便说一句,该数据源是在我的应用程序中使用实体框架实现的。

现在,我一直无法找到一种方法来动态从实体中选择一个属性。例如:

Binding bnd = new Binding(); 
bnd.Source = from i in DataModel.Entities.machine 
      where i.name == Properties.Settings.Default.CurrentMachine 
      select i.<<THE COLUMN DEFINED IN THE XML>> 

所以我正在寻找一种方法来转换一个字符串(取自XML)到实体的实际属性。

可以这样做吗?如果是这样,究竟如何?

非常感谢!

+0

你为什么这么做?我不明白为什么人们如此复杂一些......如果你的需要是定义用户界面并使用XML在运行时加载它......你为什么不动态地加载XAML?那么你可以有任何你想在外部文件中定义的绑定并在运行时加载它 –

+0

您可能正在查看动态生成表达式树... – Pawel

回答

0

尝试使用reflection和GetProperty()方法。

public Binding ReflectionBinder(string propertyName) 
    { 
     var binding = new Binding(); 
     var src = (from i in DataModel.Entities.machine 
        where i.name == Properties.Settings.Default.CurrentMachine 
        select i); 

     binding.Source = src.GetType().GetProperty(propertyName).GetValue(src, null); 

     return binding; 
    } 
+0

太好了,非常感谢! – X3N0N10