2010-06-14 58 views
6

这是我的xaml,它告诉collectionviewsource排序属性名称。CollectionViewSource的Binding PropertyName Xaml中的SortDescription

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

上面的xaml工作正常,但我有问题是,我不知道如何给SortDescription PropertyName一个变量值。我有一个属性在我的viewmodel,告诉哪些属性排序,但我无法将此属性绑定到SortDescription的PropertyName字段。

有什么办法吗?

回答

7

您可以在后面的代码中设置排序描述。

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> 

背后代码:

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; } 
    } 
} 
相关问题