2010-06-14 16 views
6

Oto mój xaml, który przekazuje nazwę właściwości sortowania kolekcji zbiorów. powyżejPowiązanie PropertyName CollectionViewSource SortDescription w Xaml

<CollectionViewSource Source="{Binding Contacts}" x:Key="contactsCollection" Filter="CollectionViewSource_Filter"> 
      <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription PropertyName="DisplayName" /> 
      </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

XAML działa dobrze, ale problemem jest to, że mam nie wiem jak dać zmienną wartość SortDescription propertyName. Mam obiekt w moim viewmodel, który mówi, którą właściwość do sortowania, ale nie jestem w stanie powiązać tej właściwości z właściwością SortDescription w polu PropertyName.

Czy jest jakiś sposób?

Odpowiedz

7

Możesz ustawić opis sortowania w kodzie z tyłu.

XAML:

<Window.Resources> 

    <CollectionViewSource Source="{Binding People}" x:Key="_peopleCVS" /> 

</Window.Resources> 

<StackPanel> 
    <ListBox 
     ItemsSource="{Binding Source={StaticResource _peopleCVS}}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path=Name}" Margin="5,0"/> 
        <TextBlock Text="{Binding Path=Age}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <ComboBox SelectionChanged="ComboBox_SelectionChanged"> 
     <ComboBoxItem>Age</ComboBoxItem> 
     <ComboBoxItem>Name</ComboBoxItem> 
    </ComboBox> 
</StackPanel> 

Kod za:

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Controls.Primitives; 
using System.Windows.Data; 

namespace CollectionViewSourceDemo 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      People = new List<Person>(); 
      People.Add(new Person("Bob", 34)); 
      People.Add(new Person("Sally", 12)); 
      People.Add(new Person("Joe", 56)); 
      People.Add(new Person("Mary", 23)); 

      DataContext = this; 
     } 

     public List<Person> People { get; private set; } 

     private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      ComboBoxItem comboBoxItem = (sender as Selector).SelectedItem as ComboBoxItem; 
      string sortProperty = comboBoxItem.Content as string; 
      CollectionViewSource cvs = FindResource("_peopleCVS") as CollectionViewSource; 
      cvs.SortDescriptions.Clear(); 
      cvs.SortDescriptions.Add(new SortDescription(sortProperty, ListSortDirection.Ascending)); 
     } 
    } 

    public class Person 
    { 
     public Person(string name, int age) 
     { 
      Name = name; 
      Age = age; 
     } 

     public string Name { get; private set; } 
     public int Age { get; private set; } 
    } 
} 
Powiązane problemy