1
Silverlightデータグリッドの場合、特定のデータコンテキストで対応するデータグリッド行を見つけるにはどうすればよいですか?ここでSilverlight:データコンテキストでDataGridのデータグリッド行を取得する方法
Silverlightデータグリッドの場合、特定のデータコンテキストで対応するデータグリッド行を見つけるにはどうすればよいですか?ここでSilverlight:データコンテキストでDataGridのデータグリッド行を取得する方法
は、私は、様々なautomationpeers活用し、これを行うために書かれている方法です。
public DataGridRow GetDataGridRowByDataContext(DataGrid dataGrid, object dataContext)
{
if (null != dataContext)
{
dataGrid.ScrollIntoView(dataContext, null);
DataGridAutomationPeer automationPeer = (DataGridAutomationPeer)DataGridAutomationPeer.CreatePeerForElement(dataGrid);
// Get the DataGridRowsPresenterAutomationPeer so we can find the rows in the data grid...
DataGridRowsPresenterAutomationPeer dataGridRowsPresenterAutomationPeer = automationPeer.GetChildren().
Where(a => (a is DataGridRowsPresenterAutomationPeer)).
Select(a => (a as DataGridRowsPresenterAutomationPeer)).
FirstOrDefault();
if (null != dataGridRowsPresenterAutomationPeer)
{
foreach (var item in dataGridRowsPresenterAutomationPeer.GetChildren())
{
// loop to find the DataGridCellAutomationPeer from which we can interrogate the owner -- which is a DataGridRow
foreach (var subitem in (item as DataGridItemAutomationPeer).GetChildren())
{
if ((subitem is DataGridCellAutomationPeer))
{
// At last -- the only public method for finding a row....
DataGridRow row = DataGridRow.GetRowContainingElement(((subitem as DataGridCellAutomationPeer).Owner as FrameworkElement));
// check this row to see if it is bound to the requested dataContext.
if ((row.DataContext) == dataContext)
{
return row;
}
break; // Only need to check one cell in each row
}
}
}
}
}
return null;
}
を