Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление ListView 
V
    Опции темы
V0fka
Дата 18.9.2014, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Есть ListView:

Код

<ListView ItemsSource="{Binding connections, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" x:Name="listView_Connections">
            <ListView.View>
                <GridView>
                    <GridView.Columns>

                        <GridViewColumn Header="Имя компьютера">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding CompName}" />
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                        <GridViewColumn Header="Имя пользователя компьютера">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding UserNameWin}" />
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                    </GridView.Columns>

                </GridView>
            </ListView.View>
        </ListView>


который привязан к ObservableCollection<ClientConnection> connections:

Код

public class ClientConnection
    {
        public string CompName
        {
            get;
            set;
        }

        public string UserNameWin
        {
            get;
            set;
        }
    }


При добавлении элементов в connections, они сразу отображаются в ListView. Появилась задача отсортировать данные в ListView по полю UserNameWin. Пробовал несколько вариантов:

1)
Код

connections = new ObservableCollection<ClientConnection>(connections.OrderBy(a => a.UserNameWin));


2)
Код

IEnumerable<ClientConnection> tmp = new ObservableCollection<ClientConnection>(connections);
connections = (ObservableCollection<ClientConnection>)tmp;
listView_Connections.ItemsSource = connections;


3) В конец обоих вариантов пробовал добавлять
Код

listView_Connections.Items.Refresh();


В результате у меня получилось отсортировать саму ObservableCollection, но ListView при этом не сортируется в таком же порядке.

Так же качнул с сайта Майкрософта пример сортировки ListView. На моё удивление, он у меня открылся и даже даже откомпилировался и запустился. Но натянуть это на свой случай у меня не вышло. У них ListView не привязан ни к чему и его наполнение происходит прямо в xaml-e и возможно с привязкой этот способ использовать нельзя.

Вопрос: как отсортировать данные в ListView?
PM MAIL   Вверх
Ilya81
Дата 18.9.2014, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: 1
Всего: 4



Чтоб сохранить отображение элементов (например, избежать перехода в начало, когда пользователь прокрутил список дальше), не следует менять экземпляр коллекции (если, конечно, обновление не задумано). Пользуйтесь методом MoveItem. Если ж всё-таки лучше обновить, то надо вызвать событие PropertyChanged для свойства коллекции после пересоздания коллекции.
PM MAIL ICQ Skype   Вверх
V0fka
Дата 18.9.2014, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Ilya81,
Цитата(Ilya81 @  18.9.2014,  12:10 Найти цитируемый пост)
Чтоб сохранить отображение элементов (например, избежать перехода в начало, когда пользователь прокрутил список дальше), не следует менять экземпляр коллекции (если, конечно, обновление не задумано). Пользуйтесь методом MoveItem.

А где именно его вызывать? Я такой метод не нашел не у ObservableCollection, не у ListView.

Цитата(Ilya81 @  18.9.2014,  12:10 Найти цитируемый пост)
Если ж всё-таки лучше обновить, то надо вызвать событие PropertyChanged для свойства коллекции после пересоздания коллекции. 

Первоочередная задача - отсортировать хоть как-то smile . Но, как в предыдущем случае, я так и не допёр у кого конкретно надо вызывать PropertyChanged  smile 
PM MAIL   Вверх
Ilya81
Дата 18.9.2014, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: 1
Всего: 4



Цитата

А где именно его вызывать? Я такой метод не нашел не у ObservableCollection, не у ListView.

Я перепутал название с protected-методом, имел в виду Move, который у ObservableCollection.

Цитата

Но, как в предыдущем случае, я так и не допёр у кого конкретно надо вызывать PropertyChanged

Это событие интерфейса INotifyPropertyChanged, его следует реализовать в том классе, в котором свойство connections (т. е. к которому Binding). Поищите про интерфейс INotifyPropertyChanged, примеров должно быть предостаточно.
PM MAIL ICQ Skype   Вверх
V0fka
Дата 24.9.2014, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Ilya81, ура!!! Реализовал INotifyPropertyChanged и сортировка начала работать, причем даже когда выделена какая-то строка, то выделение с неё не слетает. Большое вам спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.