2010-02-22 11 views

Respuesta

0

Esta respuesta depende en gran medida de cómo esté vinculando su DataGrid, específicamente cuál es el tipo subyacente de su ItemsSource. Esta respuesta asume que está usando un ObservableCollection. Como mencionas específicamente WPF, también asumo que te refieres a .NET 4.0, ya que DataGrid solo está disponible en Silverlight 3 y .NET 4.0.

Asumo que son Newing una fila llamando

ItemSource.Add(new MyObject()); 

Para obtener el comportamiento que desea, utilice el siguiente lugar:

ItemSource.Insert(0, new MyObject()); 
+0

Ooh nice ... tiene una manera ... pero eso es simular el efecto de agregar fila ... tienes que escribir controladores de eventos y administrar todo ... puedo hacerlo y gracias por la sugerencia. estoy usando .net 3.5 datagrid ... creo que es beta y lo estoy haciendo exactamente como lo has mencionado .... alguna otra idea? – kedar

+1

DataGrid está disponible para .NET 3.5 si instala WPF Toolkit, disponible en codeplex. – Dave

0

Usted tendría que escribir su propia plantilla para DataGrid donde colocaría la parte NewItemPlaceholder en la parte superior de la grilla. Mire este example para empezar (aunque el ejemplo no es la respuesta, lo señalará en la dirección correcta).

En la nota lateral, ¿puedo preguntar por qué debería tener NewItemPlaceholder en la parte superior? De alguna manera rompe el flujo natural de arriba hacia abajo que estamos tan acostumbrados a ver cuando manejamos listas/grillas.
Puede ser más intuitivo tener la opción Nuevo elemento en la parte inferior e Insertar elemento en el menú contextual de la cuadrícula o algo así. Esa es solo mi opinión, por supuesto.

1

Si está utilizando un enfoque MMVM, se puede añadir una nueva fila gusta programáticamente:

 var newEmp = new EmployeeViewModel(new EmployeeDto()); 
     EmployeeList.Add(newEmp); 
     EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0); 

En mi ejemplo estoy usando un EmployeeListViewModel para mostrar una ObservableCollection de EmployeeViewModels.

Luego también puede escribir pruebas para este comportamiento. más control que en XAML ....

/Johan

+0

+1 solución limpia –

8

¿Qué hay de NewItemPlaceholderPosition.AtBeginning? No tengo un ejemplo de código pero parece ser lo que estás describiendo. Siempre puedes hacer lo que Johan sugiere y mover u ordenar los elementos en la grilla programáticamente.

Ejemplo de código añadido por Ray Quemaduras:

var view = CollectionView.GetDefaultCollectionView(EmployeeList) 
      as IEditableCollectionView; 
if(view!=null) 
    view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning; 

Tenga en cuenta que esto requiere NET Framework 3.5 o superior.

+0

Excelente respuesta woodyiii (+1). Agregué un código y una nota sobre la versión de NET Framework para que tu respuesta sea aún mejor. –

+1

.GetDefaultCollectionView no es un método en la clase CollectionView (4.0). ¿CollectionViewSource.GetDefaultView (object) es lo mismo? – Michael

+0

@RayBurns Actualice el código con respecto a .NET Framework. El código no funciona para v4 y superior. –

Cuestiones relacionadas