【问题标题】:Binding PropertyName of CollectionViewSource SortDescription in XamlXaml中CollectionViewSource SortDescription的绑定PropertyName
【发布时间】:2010-06-14 08:13:48
【问题描述】:

这是我的 xaml,它告诉 collectionviewsource 排序属性名称。

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

上面的 xaml 工作正常,但我遇到的问题是我不知道如何为 SortDescription PropertyName 赋予变量值。我的视图模型中有一个属性,它告诉要对哪个属性进行排序,但我无法将此属性绑定到 SortDescription 的 PropertyName 字段。

有什么办法吗?

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 2011-03-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2015-01-29
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多