当鼠标离开行时,我有一个鼠标离开事件
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseLeave" Handler="Row_MouseLeave"></EventSetter>
</Style>
</DataGrid.RowStyle>
所以在处理程序中,我尝试获取与行绑定的下划线项
private void Row_MouseLeave(object sender, MouseEventArgs args)
{
DataGridRow dgr = sender as DataGridRow;
<T> = dgr.Item as <T>;
}
但是,该项目是占位符对象,而不是项目本身。
通常,您可以通过DataGrid selectedIndex属性执行我想要的操作。
DataGridRow dgr = (DataGridRow)(dg.ItemContainerGenerator.ContainerFromIndex(dg.SelectedIndex));
<T> = dgr.Item as <T>
但由于ItemSource
与DataGrid绑定,而不是DataGridRow,因此DataGridRow无法看到绑定到网格的集合...(我假设)
但是因为我没有选择一行,所以我真的不能这样做。那么我有办法做我想做的事吗?
干杯
答案 0 :(得分:3)
如果您将事件处理程序附加到DataGridRow.MouseLeave
事件,那么sender
输入参数将是DataGridRow
,正如您正确向我们展示的那样。然而,在那之后你错了。 DataGridRow.Item
属性将从DataGridRow
中返回数据项,除非您将鼠标悬停在DataGrid
<中的最后一行(空行或新行)上/ em> ...在这种情况下,只有那个案例,DataGridRow.Item
属性将返回{NewItemPlaceholder}
类型MS.Internal.NamedObject
:
private void Row_MouseLeave(object sender, MouseEventArgs args)
{
DataGridRow dataGridRow = sender as DataGridRow;
if (dataGridRow.Item is YourClass)
{
YourClass yourItem = dataGridRow.Item as YourClass;
}
else if (dataGridRow.Item is MS.Internal.NamedObject)
{
// Item is new placeholder
}
}
尝试将鼠标悬停在实际包含数据的行上,然后您应该在DataGridRow.Item
属性中找到该数据对象。