Как добавить специальный элемент в список и сохранить его наверху? - PullRequest
0 голосов
/ 19 августа 2011

У меня есть SortableListView, из которого я устанавливаю ItemsSource через привязку.Что-то вроде следующего:

  <SortableListView ItemsSource="{Binding Items}">
    <SortableListView.View>
      <GridView>
        <SortableGridViewColumn
          Header="Name"
          SortProperty="ProductName"
          DisplayMemberBinding="{Binding ProductName}"/>
      </GridView>
    </SortableListView.View>
  </SortableListView>

Когда открывается окно, я инициализирую и заполняю ObservableCollection<Item> Items.

Теперь я хотел бы добавить один (и только один) специальный элемент кверхней части списка и всегда оставляйте это как первый элемент, независимо от порядка сортировки.

В настоящее время я могу думать о двух возможных способах достижения этой цели:

  1. Создать очень специальный шаблон данных для моего ListView, где я могу добавить специальный элемент и тему ListView для обработки всегосоответственно.
  2. Привязка к заголовку и обработка события click для выполнения сортировки в моем файле с выделенным кодом и вставка специального элемента вверху.

Вариант 1 выглядит слишком много ия бы хотел избежать слишком сложной работы и варианта 2.

Есть ли какие-то альтернативные решения, которые мне не хватает?Если нет, то какой будет наилучший вариант для достижения этой цели и как мне подойти к варианту темы?

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Я предполагаю здесь, но я предполагаю, что вы используете этот элемент управления?:

http://thejoyofcode.com/Sortable_ListView_in_WPF.aspx

Если это так, он использует ICollectionView для управления своей сортировкой.ICollectionView очень гибок и позволяет сортировать несколько полей (вы знаете, как в SQL: SORT BY Field1 ASC, Field2 DESC).

Я думаю, вам нужно вставить дополнительное описание сортировки, прежде чем добавлять описание для свойства, выбранного пользователем.Таким образом, он будет сначала сортировать по вашим «помеченным» элементам, а затем по имени выбранного свойства.

(код адаптирован из статьи выше)

private void Sort(string sortBy, ListSortDirection direction)
{
    ICollectionView dataView = CollectionViewSource.GetDefaultView(this.ItemsSource);

    if (dataView != null)
    {
        dataView.SortDescriptions.Clear();

        dataView.SortDescriptions.Add(new SortDescription("IsAtTop", ListSortDirection.Ascending));
        SortDescription sd = new SortDescription(sortBy, direction);
        dataView.SortDescriptions.Add(sd);
        dataView.Refresh();
    }
}

То есть выМне просто нужно добавить свойство bool к вашему объекту под названием IsAtTop.

Надеюсь, это то, что вам нужно ....

0 голосов
/ 19 августа 2011

В вашей модели представления вы можете сохранить отдельный ObservableCollection<T>, который возвращает ваш список с одним «специальным» элементом, добавленным вверху. Если вы перехватываете событие CollectionChanged исходного ObservableCollection<T>, чтобы вы могли вызвать уведомление PropertyChanged для своей коллекции, вы можете достичь желаемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...