arun_pk Ответов: 2

CollectionViewSource не сортирует


Я использую collectionviewsource для сортировки списка в xaml

<CollectionViewSource x:Uid="CollectionViewSource_1" x:Key='sortedList'

                              Source="{Binding Path=MyList}">
                <CollectionViewSource.SortDescriptions>
                    <scm:SortDescription x:Uid="scm:SortDescription_1" PropertyName="ID"

                                     Direction="Ascending" />
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>


и выше сбор ресурсов ограничен, чтобы ListView, как ниже


<ListView x:Uid="myistBox" Name="myListBox" ItemsSource="{Binding Source={StaticResource sortedList}}"
                        SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
                        Margin="5,10,5,5"
                        Grid.Row="1"
                        extenders:ListViewExtenders.AutoScrollToEnd="True"
                        SelectionMode="Single">
              <ListView.View>
                  <GridView x:Uid="GridView_1">
                      <GridViewColumn x:Uid="GridViewColumn_1" DisplayMemberBinding="{Binding Path=ID}" Header="ID" />
                      <GridViewColumn x:Uid="GridViewColumn_2" DisplayMemberBinding="{Binding Path=Name}" Header="Name"/>
                  </GridView>
              </ListView.View>
          </ListView>




и в моей модели представления у меня есть наблюдаемые свойства коллекции класс MyList
public ObservableCollection<MyItem> MyList
        {
            get
            {
                return this.myList;
            }

            set
            {
                if (this.myList != value)
                {
                    this.myList = value;
                    OnPropertyChanged("MyList");
                }
            }
        }


А класс Myitem состоит из двух свойств
ID и имя

так что в моем коде, когда я меняю идентификатор .. я ожидаю, что список будет отсортирован, но этого не происходит .. pls совет, что не так в моей реализации

2 Ответов

Рейтинг:
1

slemaire195

Для тех, кто еще имеет эту проблему и натыкается на этот супер-старый пост через Google:

Для "живой" сортировки, в дополнение к настройке SortDescriptions, вы также должны добавить LiveSortingProperties (который принимает одну или несколько строк, используя системное пространство имен из сборки WindowsBase) и установить IsLiveSortingRequested = True.

xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"


<CollectionViewSource x:Key="ChannelsToAddView" x:Name="ChannelsToAddView" Source="{Binding DiscordChannels}"
                              Filter="ChannelsToAddView_Filter" IsLiveSortingRequested="True">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="DiscordChannelName" />
            </CollectionViewSource.SortDescriptions>
            <CollectionViewSource.LiveSortingProperties>
                <s:String>DiscordChannelName</s:String>
            </CollectionViewSource.LiveSortingProperties>
        </CollectionViewSource>


Рейтинг:
0

SteveAdey

Убедитесь, что MyItem также является производным от INotifyPropertyChanged и что изменение идентификатора вызывает событие PropertyChanged.


arun_pk

Привет Да мое свойство ID также имеет свойство изменено событие

идентификатор общественных инт
{
получить
{
вернуть это.идентификатор;
}

набор
{
если (this.id!= значение)
{
this.id= значение;
}
On свойство changed("идентификатор");
}
}