我有一个TreeView
,并且每个TreeViewNode
在它的Tag
属性中都有一个对象。当树形视图中的节点被选中时,我想要一个DataGrid
填充对象的所有字段的名称和值,通过反射获得。我无法弄清楚如何使用wpf databinding来做到这一点。关于如何使用简单方法绑定DataGrid
的例子很少,我也使用了转换函数。如何将此数据绑定到DataGrid?
到目前为止我有什么是让我从一个单一的对象所需的数据的方法:
internal static IEnumerable<Tuple<string, object>> GetFieldInfo(object o)
{
return
from FieldInfo info in o.GetType().GetFields()
select Tuple.Create(info.Name, info.GetValue(o));
}
,并在XAML TreeView和数据网格:
<TreeView Name="objectList" />
<DataGrid Name="objectData" />
我可以”找出正确的DataBinding咒语,通过GetFieldInfo
方法获得((TreeViewNode)objectList.SelectedItem).Tag
财产,并进入objectData.ItemsSource
财产。
你不应该使用反射的主/从细节接近 – 2010-12-15 15:01:04
我需要列出对象的所有字段在标签中(对象可以是任意类型)和网格中的字段值。我没有用反射怎么做? – thecoop 2010-12-15 15:04:41
几件事情...跳过Tag属性,因为它显着地耦合View,并通过TreeView.SelectedItem属性将数据绑定到您的VieWModel;一旦用户选择了一个新节点,您的DataGrid将通过ViewModel进行更新,而不是试图从Tag中提取数据。无论你想从模型中找到什么数据,我都会在模型本身上添加一些东西来返回值。也许在基类/接口中将其抽象出来(是的,你仍然需要反思,如你所说的那样) – 2010-12-15 15:16:38