none
DataGrid y el Tabulador RRS feed

  • Pregunta

  • Hola,

    Me he encontrado con un problema que por muchas vueltas que le doy no consigo solucionar.

    Tengo un DataGrid en una aplicación WPF definido como sigue:

    <DataGrid Name="ParcelasBox" ItemsSource="{Binding Parcelas}" SelectedItem="{Binding Path=CurrentParcela}" SelectionMode="Single"
              AutoGenerateColumns="False" KeyboardNavigation.TabNavigation="Contained" CanUserAddRows="True">
              <DataGrid.Columns>
                   <DataGridTextColumn Binding="{Binding Path=NumeroPoligono}" Header="Polígono"/>
                   <DataGridTextColumn Binding="{Binding Path=NumeroParcela}" Header="Parcela"/>
                   <DataGridTextColumn Binding="{Binding Path=NumeroRecinto}" Header="Recinto"/>
                   <DataGridTextColumn Binding="{Binding Path=Superficie}" Header="Superficie"/>
                   <DataGridTextColumn Binding="{Binding Path=SuperficieSembrada}" Header="Superficie Sembrada"/>
              </DataGrid.Columns>
    </DataGrid>

    El elemento Parcelas al que está enlazado el ItemsSource es un ObservableCollection<Parcela>.

    El problema viene cuando estás introduciendo datos y tiene que generar una nueva linea (que crearía un nuevo objeto Parcela y lo añadiría a la colección enlazada). Cuando se está en la ultima celda y se pulsa el tabulador se sale del DataGrid y se va a otro elemento fuera del mismo (que puede ser el siguiente en la lista de tabulación o el primero de toda la ventana/UserControl si todos los elementos están marcados como IsTabStop="False".

    He probado tanto haciendo que la clase Parcela implemente IEditableObject como que no, y de ninguna forma funciona.

    En principio el KeyboardNavigation.TabNavigation="Contained" que tiene definido el DataGrid debería ser suficiente, pero por lo visto no lo es ya que para rows que ya existen en el mismo funciona correctamente, pero no funciona cuando tiene que crear una nueva, directamente crea el nuevo row pero se sale del DataGrid.

    ¿Alguna ayuda?

    domingo, 8 de febrero de 2015 13:15

Todas las respuestas

  • ¿Ha probado KeyboardNavigation.TabNavigation="Cycle"?  Leí que eso funciona.

    Jose R. MCP
    Code Samples

    lunes, 9 de febrero de 2015 16:21
  • Hola,

    Si que había probado KeyboardNavigation.TabNavigation="Cycle" que lo que hace es mantenerte en la fila en la que estás, no añade ninguna nueva y cuando llegas a la ultima celda te vuelve a la primera de la misma fila.

    Después de mucho rebuscar y de preguntar aquí al final he encontrado porqué lo hacía aunque no he encontrado justificación alguna al porqué esto afecta al DataGrid.

    La clase Parcela tiene una propiedad de solo lectura (solo con su get) de tipo bool. Esta propiedad no aparece entre las columnas del DataGrid, pero si la eliminamos de la clase entonces el DataGrid funciona correctamente. Se podría pensar que es por no tener valor, pero al ser una propiedad bool, no una propiedad nullable entonces el valor por defecto sería un false, pero así causaba problemas.

    De todas formas gracias por intentarlo.

    lunes, 9 de febrero de 2015 16:34