2010-06-14 16 views
6

İşte benim xaml, collectionviewsource sıralama özellik adını söyler.Binding PropertyName of CollectionViewSource SortAçıklama içinde Xaml

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

xaml Yukarıdaki çalışıyor ama ben sorun ben SortDescription mülküne değişken değeri vermek için nasıl bilmiyorum olmasıdır. ViewModelimde hangi özelliği sıralayacağını söyleyen bir özellik var ancak bu özelliği SortDescription'ın PropertyName alanına bağlayamıyorum.

Herhangi bir yolu var mı?

cevap

7

Sıralama açıklamasını arkadaki kodda ayarlayabilirsiniz.

XAML: arkasında

<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> 

Kodu:

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; } 
    } 
} 
İlgili konular