none
CollectionViewSource, no permite ordenar la vista. RRS feed

  • Pregunta

  • Hola,

    PREMISAS:

    Visual Studio 2010

    Net Framework 4

    Ui: WPf4

    Acceso a datos Entity Framework

    OS: Windows XP SP3

    PLANTEAMIENTO:

    Utilizando los diseñadores propios de VS genero un entitity model partiendo de una base de datos.

    Utilizando los diseñadores de VS genero un ventana de WPF4. Dentro de esta inserto un datagrid arrastrando desde el origen de datos la representación en EF de una tabla sencilla. Dentro de la ventana en XAML se me ha creado en la sección Window.resource un objeto CollectionViewSource, que por Binding enlaza la propiedad ItemsSource del Datagrid a CollectionViewSource.

    Todo funciona correctamente con la excepción de:

    PROBLEMA:

    Al consultar la propiedad cansource de CollectionViewSource o extraer su vista predeterminada y volver a consulta esta misma propiedad simpre me informa que es "false",por lo tanto no puedo ejecutar ordenación de los datos desde la vista generada por CollectionViewSource.

    Si alguien le ha pasado lo mismo y ha conseguido solucionarlo, agradecería que me informase del problema.

    GRACIAS.

     

     

    • Cambiado jtorrecilla miércoles, 26 de enero de 2011 14:47 (De:Lenguaje C#)
    martes, 25 de enero de 2011 16:32

Todas las respuestas

  • Si te da excepciones o errores no controlado, usas el Try y Catch.
    http://electronica-pic.blogspot.com
    lunes, 21 de febrero de 2011 5:25
  • Hola atractor.

    El comportamiento es correcto.

    a un objeto de tipo CollectionViewSource, en su propiedad source se le puede agregar cualquier tipo de coleccion y esta coleccion sera la que establezca las propiedades de las que dispondra el CollectionView.

    Debes tener en cuenta que si has trabajado con DataSets y dataview, esto no es lo mismo, ni siquiera parecido. 

    Aqui lo que manda es el objeto que usas como Source y en el caso por defecto que comentas se asigna un ObjectResult<T>, el cual es un objeto de resultado de consulta linq que retorna un IEnumerable y el cual es un objeto de iteracion simple que hace uso del patron 'iterator' en su esencia.

    Bien tras todo este rollo, para que puedas hacer uso de la ordenacion debes asignar una coleccion que se pueda ordenar, como un array o lista (entre otros), de modo que en tu funcion que asignas al source (algo como esto):

    booksViewSource.Source = booksQuery.Execute(System.Data.Objects.MergeOption.AppendOnly)

    puedes hacer algo asi para que se pueda ordenar:

    booksViewSource.Source = booksQuery.Execute(System.Data.Objects.MergeOption.AppendOnly).ToArray();

     

    y ya tienes asignada una coleccion que tiene el cansort a true.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Propuesto como respuesta David_González sábado, 26 de febrero de 2011 19:54
    lunes, 21 de febrero de 2011 19:40