in wpf datagrid come ottenere la riga vuota in cima? cioè quando l'utente vuole aggiungere una nuova riga, arriva sempre in fondo. Ma voglio che sia al top ... posso farlo in XAML?in datagid wpf come ottenere la riga vuota in cima?
risposta
Questa risposta dipende in gran parte da come si sta vincolando il DataGrid, in particolare dal tipo sottostante di ItemsSource. Questa risposta presuppone che si stia utilizzando uno ObservableCollection. Dal momento che menzioni specificamente WPF, suppongo anche che tu intenda .NET 4.0, dato che DataGrid è disponibile solo in Silverlight 3 e .NET 4.0.
presumo che sei Newing una fila chiamando
ItemSource.Add(new MyObject());
Per ottenere il comportamento desiderato, utilizzare il seguente invece:
ItemSource.Insert(0, new MyObject());
Si dovrà scrivere il proprio modello per DataGrid in cui posizionare la parte NewItemPlaceholder sulla parte superiore della griglia. Guarda questo example per iniziare (anche se l'esempio non è la risposta ti indirizzerà nella giusta direzione).
Sulla nota a margine posso chiedere perché dovresti avere NewItemPlaceholder in alto? È come se rompesse il naturale flusso dal basso verso l'alto che siamo così abituati a vedere quando si tratta di elenchi/griglie.
Potrebbe essere più intuitivo avere la voce Nuovo elemento in basso e l'opzione Inserisci oggetto nel menu di scelta rapida per la griglia o qualcosa del genere. Questa è solo la mia opinione, naturalmente.
Se stai usando un approccio MMVM, è possibile aggiungere una nuova fila come programmaticamente:
var newEmp = new EmployeeViewModel(new EmployeeDto());
EmployeeList.Add(newEmp);
EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0);
Nel mio esempio sto utilizzando un EmployeeListViewModel per visualizzare un'ObservableCollection di EmployeeViewModels.
Quindi è anche possibile scrivere test per questo comportamento. più controllo che in XAML ....
/Johan
+1 soluzione pulita –
Che dire NewItemPlaceholderPosition.AtBeginning? Non ho un esempio di codice ma sembra essere quello che stai descrivendo. Puoi sempre fare ciò che Johan suggerisce e spostare o ordinare gli elementi nella griglia a livello di programmazione.
Esempio di codice aggiunto da Ray Burns:
var view = CollectionView.GetDefaultCollectionView(EmployeeList)
as IEditableCollectionView;
if(view!=null)
view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
Si noti che questo richiede .NET Framework 3.5 o superiore.
Risposta eccellente woodyiii (+1). Ho aggiunto del codice e una nota sulla versione di NET Framework per rendere la tua risposta ancora più interessante. –
.GetDefaultCollectionView non è un metodo sulla classe CollectionView (4.0). CollectionViewSource.GetDefaultView (oggetto) è la stessa cosa? – Michael
@RayBurns Si prega di aggiornare il codice per quanto riguarda .NET Framework. Il codice non funziona per v4 e successivi .. –
- 1. DataGrid WPF: riga vuota mancante
- 2. Come determinare la riga vuota?
- 3. WPF-Window In cima alla propria applicazione?
- 4. Rimuovi riga vuota in Eclipse
- 5. prima riga vuota in excel
- 6. Force MessageBox in cima alla finestra dell'applicazione in .net/WPF
- 7. Come ottenere ComboBox.SelectedText in WPF
- 8. Rimuovere la colonna vuota in un DataGrid WPF
- 9. WPF 4 DataGrid: ottenere il numero di riga in RowHeader
- 10. Wpf DataGrid aggiunta nuova riga
- 11. Come aggiungere una riga vuota in un file di testo usando la riga di comando?
- 12. jQuery ottenere l'altezza da cima
- 13. Ottenere la riga successiva in un file
- 14. Come ottenere la posizione del mouse sullo schermo in WPF?
- 15. come ottenere il doppio clic in WPF
- 16. Ottenere l'URL in WPF WebBrowser
- 17. Come ottenere l'effetto ombreggiatura inserto in WPF
- 18. Come posso ottenere l'ultima riga non vuota di un file usando tail in Bash?
- 19. Ottenere Valore dell'ultimo colonna non vuota per ogni riga
- 20. Come scorrere in cima alla pagina in ionico
- 21. Come eliminare la pagina vuota in mPdf
- 22. div in cima iframe
- 23. jquery - Torna in cima
- 24. Ottenere una pagina vuota in Android WebViewClient
- 25. Come posso ottenere DPI in WPF?
- 26. come inserire o aggiungere una nuova riga in cima alla jtextarea in java swing?
- 27. come ottenere la dimensione della riga mysql in GB
- 28. Come ottenere la riga dati selezionata in jqGrid
- 29. Come ottenere la posizione (sullo schermo) della riga in listview
- 30. Come ottenere la riga con timestamp massimo in postgres?
Ooh nice .. thas one way .. ma questo è simulare l'effetto add row ... devi scrivere gestori di eventi e gestire tutto ... posso farlo e grazie per il suggerimento. sto usando .net 3.5 datagrid .. penso che sia la sua beta e lo faccio esattamente come tu hai menzionato .... altre idee? – kedar
DataGrid è disponibile per .NET 3.5 se si installa WPF Toolkit, disponibile su codeplex. – Dave