2012-04-12 14 views
5

Me gustaría poner una fila de mi cuadrícula de datos en vista programáticamente. Tengo más de 100 filas. Cuando creo una fila (lo cual estoy haciendo agregando un elemento a una colección observable) me gustaría que se seleccionara esa nueva fila y la tuviera en cuenta. Pude seleccionar la nueva fila en mi código pero no pude hacer el desplazamiento. Más, quiero que la primera celda de la fila esté en modo de edición para que el usuario pueda ingresar texto. Estoy siguiendo el patrón de MVVM para la aplicación y me gustaría mantener el código cero en mis vistas. ¿Cómo puedo conseguir esto?Programativamente trayendo una fila de cuadrícula de datos a la vista en WPF, MVVM

será apreciado Cualquier ayuda o sugerencia ....

Actualización:

Esto lo hice en mi XAML

<telerik:RadGridView ItemsSource="{Binding AllPartClasses}" 
        SelectedItem="{Binding SelectedPartClassViewModel, Mode=TwoWay}"   
        SelectionMode="Single" IsSynchronizedWithCurrentItem="True"> 

en mi modelo de vista que hice esto

void AddNewPartClassExecute() 
    { 
     PartClass newPartClass = new PartClass(); 
     PartClassViewModel tempPartClass = new PartClassViewModel(newPartClass); 
     tempPartClass.IsInValid = true; 
     AllPartClasses.Add(tempPartClass); 
     SelectedPartClassViewModel = tempPartClass; 
     Global.DbContext.PartClasses.AddObject(newPartClass); 

     //OnPropertyChanged("AllPartClasses"); 
    } 
public PartClassViewModel SelectedPartClassViewModel 
    { 
     get 
     { 
      return _selectedPartClassViewModel; 
     } 
     set 
     { 
      _selectedPartClassViewModel = value; 
      OnPropertyChanged("SelectedPartClassViewModel"); 
     } 
    } 

No funcionó para mí.

Respuesta

2

Al seguir el patrón MVVM no debe hacer cosas específicas de UI como desplazarse desde un código.

solución sería simple - sólo se unen DataGrid.SelectedItem a una propiedad en modelo de vista y cuando se añade un nuevo elemento de la colección artículos simplemente actualizar una propiedad destinada a SelectedItem lo que haría referencia al elemento de cuadrícula y los datos se agregó debería seleccionar una fila apropiada automáticamente.

<DataGrid 
    ItemsSource="{Binding UnderyingItemsCollection}" 
    SelectedItem="{Binding RecentlyAddedItem, Mode=TwoWay}" 
    IsSynchronizedWithCurrentItem="True"> 
+1

Muchas gracias por mirar. Hice lo que sugeriste. Pero sin suerte todavía. He agregado mi código en la sección de actualización. por favor, avíseme si me falta algo. Obtuve la fila seleccionada, pero ¿qué debo hacer para que la cuadrícula de datos se desplace a la fila inferior ...? – IamaC

+0

Lo he intentado, pero no se desplaza a la fila 'SelectedItem'. Intenté cambiar 'SelectedItem' de viewModel, sin embargo' DataGrid' no se desplaza a la fila 'SelectedItem'. – StepUp

5

Para el WPF regulares DataGrid puede utilizar ScrollIntoView. En su vista, conecte el evento SelectionChanged a lo siguiente en su archivo cs code-behind de vista.

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Selector selector = sender as Selector; 
    DataGrid dataGrid = selector as DataGrid; 
    if (dataGrid != null && selector.SelectedItem != null && dataGrid.SelectedIndex >= 0) 
    { 
     dataGrid.ScrollIntoView(selector.SelectedItem); 
    } 
} 
Cuestiones relacionadas