这听起来像一个方便的解决方案,以一个相当普遍的问题。
这样做有两个数据网格将是你身后,反射使用一些代码最简单的方法。首先定义一个类型来显示每个属性的名称和值:
class PropertyModel {
private readonly string _name = "";
private readonly object _value = null;
public PropertyModel(string name, object value) {
_name = name ?? "";
_value = _value;
}
public string Name {
get { return _name; }
}
public object Value {
get { return _value; }
}
}
随后的事件处理程序添加到您的代码隐藏来处理你的第一个数据网格的选择变化:
private void _onDataGrid1SelectionChanged(object sender, SelectedCellsChangedEventArgs e) {
if (e.AddedCells.Count > 0) {
var props = new Collection<PropertyModel>();
var obj = _dataGrid1.SelectedItem;
foreach(var prop in obj.GetType().GetProperties()) {
props.Add(new PropertyModel(prop.Name, prop.GetValue(obj, null)));
}
_dataGrid2.ItemsSource = props;
}
}
注意,上面的代码非常粗糙,并且仅在DataGrid1的SelectionMode设置为Single时才有效。不过,如果您愿意快速且肮脏(使用事件处理程序),那么这是一个很好的开始。
另一个伟大的解决方案是使用行详细信息。 This is a pretty good intro tutorial on using row details。 当然你也应该阅读msdn article on the subject。
感谢迈克尔,你的代码是非常有益的。它也适用于DataGridSelecionMode设置为Extended,因为SelectedItem属性获取当前Selection中的第一个元素,这正是我所需要的。 – marko