Я в настоящее время реализую LLS (LongListSelector) в приложении WP8, которое сгруппировано. У меня есть контекстное меню из WPToolkit. Я надеялся найти, как удалить элементы из моего LLS, не переназначая предметы LLS. Рациональное я хочу сохранить позицию в списке после удаления элемента.Удаление элемента из сгруппированной LLS без повторного назначения источника данных?
Теперь у меня есть основной список, который хранит все мои объекты и передается функции «GetGroup» для возврата коллекции Observable групп в качестве источника элемента. Теперь я понимаю, что просто удаление из основного списка не удаляется из источника элемента. Поэтому вместо этого я удалился из основного списка, а также передал элемент ItemSource в коллекцию Observable и удалил его. Он работал, вплоть до конкретных экземпляров (удаление второго в последний элемент в списке). Затем я получаю критическое исключение (значение за пределами границ). Однако путем отладки все правильные значения вызываются и удаляются, и после этого следует исключение. Как я могу сделать это правильно? Что я делаю неправильно? Ниже приведены мои фрагменты кода.
Группировка:
private ObservableCollection<Model.Cartitem> cartList = new ObservableCollection<Model.allItems>(); // Overall Item list for current instance.
class Group<T> : ObservableCollection<T>, INotifyPropertyChanged
{
public Group(string name, IEnumerable<T> items)
: base(items)
{
this.imagePath = new Uri(name, UriKind.Relative);
}
private String _Title;
private Uri _imagePath;
public string Title
{
get
{
return _Title;
}
set
{
if (_Title != value)
{
_Title = value;
NotifyPropertyChanged("Title");
}
}
}
public Uri imagePath
{
get
{
return _imagePath;
}
set
{
if (_imagePath != value)
{
_imagePath = value;
NotifyPropertyChanged("imagePath");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
}
// Functions to Handle Group Lists
private ObservableCollection<ITemClass> GetItemList()
{
return allItems;
}
private ObservableCollection<Group<ItemClass>> GetItemGroups()
{
IEnumerable<ItemClass> tempItemList = GetCartList();
return GetItemGroups(tempItemList , c => c.ItemCategory.ID + "|" + c.ItemCategory.Name + "|" + c.ItemCategory.IMPath);
}
private static ObservableCollection<Group<T>> GetItemGroups<T>(IEnumerable<T> itemList, Func<T, string> getKeyFunc)
{
IEnumerable<Group<T>> groupList = from item in itemList
group item by getKeyFunc(item) into g
orderby g.Key
select new Group<T>(g.Key, g);
//return groupList.ToList();
ObservableCollection<Group<T>> t = new ObservableCollection<Group<T>>();
foreach (Group<T> sublist in groupList)
{
t.Add(sublist);
}
return t;
}
Как я обработки удалений:
this.cartList.Remove(editingCartItem);
ObservableCollection<Group<ItemClass>> t = (ObservableCollection<Group<ItemClass>>)LongListSelectorObj.ItemsSource;
foreach (Group<ItemClass> sublist in t)
{
if(sublist.Contains(editingItem))
sublist.Remove(editingItem);
break;
}
Это немного раздутый, как я сделал последние изменения, чтобы попытаться сделать все ObservableCollection, думая, что бы исправить мою проблему в то время. Это помогло другим, но я думаю, что это сводится к тому, что списки просто разные.
Я думаю, что могу изменить это, чтобы напрямую связать ObservableCollection>, но тогда я верю, что потеряю простое добавление/сортировку, правильно?
Кроме того, я предположил, что проблема может быть связана с тем, что я пытаюсь удалить элемент из двух отдельных списков. Однако я пробовал его только с одним, и у меня все еще есть одна и та же проблема с исключениями, которую я предполагаю, из-за актера (т. Е. Возможность удалить все до второго, а затем последнего элемента).
Большое спасибо за любую входящую помощь.
Благодарим вас за заметки, я сделал небольшое редактирование в своей копии и вставке, чтобы получить его здесь (сократил все имена), но все равно получит Reshaper. И попробуй многое из того, что ты предложил. Я не использовал строковый шаблон MVVM в этом, поскольку я начал еще задолго до того, как узнал об этом, а затем ему сказали, что для простого приложения (скажем, двух страниц) мне это действительно не понадобилось, поэтому я не сделал этого попробуйте изменить его. Нужно ли мне? – Poken1151