这听起来像是对一个相当普遍的问题的一种方便的解决方案。
使用两个数据网格执行此操作的最简单方法是使用一些代码隐藏和反射。首先定义一个类型来显示每个属性的名称和值:
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 时才有效。但是,如果您愿意快速而肮脏地(使用事件处理程序),那么这是一个很好的起点。
另一个很好的解决方案是使用行详细信息。
这是一个关于使用行详细信息的很好的介绍教程。当然,您还应该阅读有关该主题的 msdn 文章。