In un gestore eventi per un comando per un DataGrid, ottengo DataGridCell in ExecutedRoutedEventArgs. Tuttavia, non sono riuscito a capire come ottenere il suo DataGrid e DataGridRow associati. Il tuo aiuto è molto apprezzato.Come trovare il proprietario DataGrid e DataGridRow da DataGridCell in WPF?
14
A
risposta
12
Probabilmente desidera impostare una sorta di RelativeSource
vincolante che si può ottenere la "griglia genitore/riga" attraverso un {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}
, ma la tua domanda mi ha fatto pensare ...
Si potrebbe:
utilizzare la riflessione:
var gridCell = ....;
var parentRow = gridCell
.GetType()
.GetProperty("RowOwner",
BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(null) as DataGridRow;
Utilizzare il VisualTreeHelper
:
var gridCell = ...;
var parent = VisualTreeHelper.GetParent(gridCell);
while(parent != null && parent.GetType() != typeof(DataGridRow))
{
parent = VisualTreeHelper.GetParent(parent);
}
0
Un modo che si possa fare è quello di passare uno o entrambi gli elementi necessari in un CommandParameter:
<MouseBinding
MouseAction="LeftDoubleClick"
Command="cmd:CustomCommands.Open"
CommandParameter="{Binding ElementName=MyDataGrid}}" />
Se avete bisogno di entrambi, si potrebbe aggiungere un convertitore multi-valore che li combina in un Tuple
(o lasciarlo come un oggetto [])
Poi nel code-behind è possibile accedervi utilizzando e.Parameter
2
Ecco quello che penso è una risposta completa ...
private void Copy(object sender, ExecutedRoutedEventArgs e)
{
DataGrid grid = GetParent<DataGrid>(e.OriginalSource as DependencyObject);
DataGridRow row = GetParent<DataGridRow>(e.OriginalSource as DependencyObject);
}
private T GetParent<T>(DependencyObject d) where T:class
{
while (d != null && !(d is T))
{
d = VisualTreeHelper.GetParent(d);
}
return d as T;
}
Problemi correlati
- 1. Selezionare DataGridCell da DataGrid
- 2. Come rendere WPF DataGridCell ReadOnly?
- 3. WPF - Come ottenere una cella da una DataGridRow?
- 4. Effettivamente in sola lettura in WPF DataGridCell
- 5. Come estrarre DataGridCell dalla classe DataGridCellinfo in WPF
- 6. Creazione di un oggetto ControlTemplate per un DataGridRow in WPF
- 7. Associazione dinamica nel modello DataGridCell WPF
- 8. WPF DataGrid AlternatingRowBackground e RowStyle precedenza
- 9. IsSelected Legatura in WPF DataGrid
- 10. WPF DataGrid - Come uscire automaticamente dalla modalità di modifica?
- 11. WPF Datagrid set riga selezionata
- 12. Looping tramite WPF DataGrid Utilizzo di foreach
- 13. datagrid WPF: convertitore e StringFormat
- 14. WPF Ottieni proprietario UserControl
- 15. Datagrid modificabile in WPF
- 16. Modifica una cella di una riga di un DataGrid (WPF) sta cambiando celle di righe indicati
- 17. Trigger DataGrid WPF sul contenuto della cella
- 18. Montaggio automatico dei contenuti datagrid WPF quando datagrid celle si concentrerà
- 19. Focus su DataGridCell per SelectedItem quando DataGrid riceve il focus sulla tastiera
- 20. Evidenzia celle in WPF DataGrid quando il valore associato cambia
- 21. WPF datagrid si alternano fila colorazione
- 22. StringFormat personalizzato in WPF DataGrid
- 23. Come aggiornare un DataGrid WPF?
- 24. Rimozione di righe da un datagrid WPF
- 25. Prestazioni Datagrid WPF
- 26. Binding proprietà DataGridCell ToolTip al valore della DataGridCell
- 27. Come posso trovare il PROPRIETARIO di un oggetto in Oracle?
- 28. Comportamento imprevisto di DataGrid
- 29. Migliora prestazioni DataGrid WPF
- 30. Dove posso trovare i modelli XAML per un DataGrid WPF?