Итак, мой вопрос: как я могу заставить представление списка использовать метод Move ()?
Текущий ListView не предоставляет свойство или метод, который поддерживаетэта операция.
Источник данных ListView
не обязательно ObservableCollection
, это может быть массив, список или другая коллекция, и эти коллекции могут не иметь Move()
метода.
Но большинство коллекций поддерживают методы Remove
и Insert
. Когда ListView
выполняет переупорядочение данных, наилучшим выбором является вызов методов Remove
и Insert
.
На этой основе также реализуется метод Move
ObservableCollection
. В соответствии с текущим открытым исходным кодом .Net Core , я нашел реализацию из ObservableCollection.Move
.
/// <summary>
/// Called by base class ObservableCollection<T> when an item is to be moved within the list;
/// raises a CollectionChanged event to any listeners.
/// </summary>
protected virtual void MoveItem(int oldIndex, int newIndex)
{
CheckReentrancy();
T removedItem = this[oldIndex];
base.RemoveItem(oldIndex);
base.InsertItem(newIndex, removedItem);
OnIndexerPropertyChanged();
OnCollectionChanged(NotifyCollectionChangedAction.Move, removedItem, newIndex, oldIndex);
}
А вот реализация .Net Framework. (Почти такая же)
Хотя UWP не имеет открытого исходного кода, принципиальной разницы нет.
Видно, что дажеObservableCollection
использует внутренние методы Remove
и Insert
, поэтому ListView
не делает преднамеренного акцента на использовании метода ObservableCollection.Move
для регулировки положения элементов в коллекции.
С наилучшими пожеланиями.