這聽起來像一個方便的解決方案,以一個相當普遍的問題。
這樣做有兩個數據網格將是你身後,反射使用一些代碼最簡單的方法。首先定義一個類型來顯示每個屬性的名稱和值:
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