DataGrid SelectedItem绑定

时间:2012-01-17 14:45:47

标签: wpf binding mvvm datagrid selecteditem

以下是我的视图模型背后的代码:

private DataRow selectedErrorRow;
public DataRow SelectedErrorRow
{
    get { return selectedErrorRow; }
    set { selectedErrorRow = value; base.RaisePropertyChanged("SelectedErrorRow"); }
}

然后在我看来:

<DataGrid SelectedItem="{Binding SelectedErrorRow,Mode=TwoWay}"

绑定在某种程度上有效...当绘制数据网格时它“获取”值但是当选择/突出显示新值时它永远不会设置它....任何想法?

请注意,数据网格的项目来源是DataTable。

修改 Datagrid位于PopUp中,当数据网格被绘制时,它将获得绑定值(null)。但是,一旦我选择/突出显示一行,它就不会“设置”任何内容。然而,当重绘时(弹出窗口打开,我选择一行,关闭它,然后重新打开它),它会将绑定值设置为null。事情是它永远不会将值设置为null,而只是在它绘制的第二个时间内设置它。

3 个答案:

答案 0 :(得分:4)

我需要改变我绑定的内容。它需要绑定到DataRowView而不是DataRow

答案 1 :(得分:0)

我以前遇到过这个问题并自己弄清楚了。

要知道问题是什么并不直观,因为您无法在调试中看到真正的价值,但是当您在数据网格上数据绑定DataTable时,您首先认为它具有DataTable类型来源对吗?如果你这么想,那你错了。

实际上数据网格或绑定(我仍然不知道它发生在哪里,因为我只看到我身边的DataTable)对DataTable对象进行转换/转换,如DataTable.AsDataView()将其自身转换为DataView,以便所选项目对DataRowView有意义。

我知道这是一个古老的问题,但这可能会让那些到达这里并且也希望将价值设定为数据源特别是转换器的人们了解

答案 2 :(得分:-1)

试试这个:

DataGrid SelectedItem="{Binding Path=SelectedErrorRow,Mode=TwoWay}

这可以解决您的问题。