Привязка PropertyName для CollectionViewSource SortDescription в Xaml - PullRequest
6 голосов
/ 14 июня 2010

Вот мой xaml, который сообщает имя свойства сортировки collectionviewsource.

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

Вышеприведенный xaml работает нормально, но у меня проблема в том, что я не знаю, как присвоить значение переменной SortDescription PropertyName.У меня есть свойство в моей модели представления, которое сообщает, какое свойство сортировать, но я не могу связать это свойство с полем PropertyName SortDescription.

Есть ли способ?

1 Ответ

7 голосов
/ 14 июня 2010

Вы можете установить описание сортировки в коде позади.

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; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...