0

目前,我正在以这种方式从数据网格(WPF)中检索所选行的实际数据绑定对象:

private void PointListDataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
    PointItem pointItem = (sender as DataGrid).CurrentItem as PointItem;
}

它有效,但这很不雅,需要我投两次。

Treeview 有一个 SelectedItemChanged 事件,它允许我从事件参数中检索数据绑定对象,但我找不到对 DataGrid 执行相同操作的方法。

如何检索选定行的数据绑定对象?

4

1 回答 1

1

您可以将 PointItem 类型的属性添加到 DataContext 类(例如,包含 DataGrid 的 Window 或 Page 类)并将 CurrentItem 属性绑定到此属性。然后数据绑定为您处理转换,您不必手动进行:

    public PointItem CurrentPointItem
    {
        get { return (PointItem)GetValue(CurrentPointItemProperty); }
        set { SetValue(CurrentPointItemProperty, value); }
    }

    // Using a DependencyProperty as the backing store for CurrentPointItem.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CurrentPointItemProperty =
        DependencyProperty.Register("CurrentPointItem", typeof(PointItem), typeof(MainWindow), new PropertyMetadata(null));

和您的 xaml(当然,您必须将 DataGrid 的 DataContext 属性或其父级之一设置为包含 CurrentPointItem 属性的对象):

<DataGrid CurrentItem={Binding CurrentPointItem} />

比你可以这样写你的事件:

private void PointListDataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
    PointItem pointItem = CurrentPointItem;
    if (pointItem == null)
    {
        //no item selected
    }
}
于 2013-07-02T16:10:00.623 回答