2011-04-27 10 views
14

Supongamos que tengo ObservableCollection de clase empleadoClasificación ObservableCollection

public ObservableCollection<Employee> employeeCollection = new ObservableCollection<Employee>(); 

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public double MobileNumber { get; set; } 
    public string City { get; set; } 
    public int Age { get; set; } 

    public Employee() {} 
} 

Ahora estoy tratando de resolver el ObservableCollection (“employeeCollection”) mediante la selección apropiada por el usuario del cuadro combinado [... será .Sort Por FirstName ... .Sort por MobileNumber etc ...] ..

y se requiere volver a ordenar la colección observable .... significa que no debería estar en forma de “var” debe ser ObservableCollection<Employee>

para que yo pueda volver a asignar la propiedad de “ItemsSource”“ItemsControl” ...

Gracias ......

+2

¿Por qué desea ordenar la colección? También puede realizar la clasificación en el enlace de datos. – PVitt

+0

[En mi aplicación "Item controle" mostrar a cada empleado en una colección observable ahora quiero clasificar la colección observable para que la interfaz de usuario de mi aplicación cambie según la colección observable será ordenada ...... gracias] – Pritesh

+0

Sería bueno cuando pudiera aceptar una respuesta ... – PVitt

Respuesta

27

Puede ordenar la vista de la colección en lugar de ordenar la colección en sí:

// xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 
<myView.Resources> 
    <CollectionViewSource x:Key="ItemListViewSource" Source="{Binding Itemlist}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="SortingProperty" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</myView.Resources> 

Y a continuación, puede utilizar la CollectionViewSource como ItemSource:

ItemsSource="{Binding Source={StaticResource ItemListViewSource}}" 
+1

Tenga en cuenta que 'PropertyName' no puede usar el enlace. Produce directamente el siguiente error de tiempo de ejecución: 'No se puede establecer un 'Enlace' en la propiedad 'PropertyName' del tipo 'SortDescription'. Un 'Enlace' solo se puede configurar en una DependencyProperty de un DependencyObject. –

+0

@OndrejJanacek ¿Este es un nuevo comportamiento? Juraría que lo usé de esa manera. Pero ya no tengo acceso al código para verificarlo. – PVitt

+0

@ Bueno, no es altamente propagable que lo haya usado de esa manera. La propiedad, después de todo, se llama 'PropertyName', que indica que podría tomar el nombre de una cadena de una propiedad, no un enlace directo a ella. Pero soy nuevo en WPF, solo tropecé con esto porque estaba buscando la solución y la implementé, por lo que es posible que haya funcionado de otra manera. –

1

No es necesario para ordenar a sí mismo, pero puede dejar que WPF lo haga por usted. Ver SortDescription, por ejemplo.

3

Creo que PVitt puede tener la mejor solución ... sin embargo, encontré esta SortedObservableCollection clase que quizás podría ayudar?

http://softcollections.codeplex.com/

+1

Una implementación alternativa de una colección observable ordenada: [ObservableSortedList ] (https://bitbucket.org/rstarkov/wpfcrutches/src/tip/ObservableSortedList.cs). –

Cuestiones relacionadas