2013-05-17 4 views
0

Есть ли способ получить индекс определенного элемента из элемента управления LongListSelector? Я хотел бы удалить объект, который выбрал пользователь, но, похоже, нет простого способа сделать это. Источник данных LongListSelector (ObservableCollection) может содержать дубликаты, поэтому, если я вызываю удаление на нем, он удалит только первый экземпляр, который он встречает, а не тот, который выбран пользователем.LongListSelector получить выбранный индекс

Я могу использовать метод RemoveAt ObservableCollection, но я не могу получить индекс из LongListSelector, чтобы передать его как параметр метода RemoveAt.

+0

Что вы подразумеваете под «может содержать дубликаты»? Вы имеете в виду, что ваш список содержит ** тот же ** экземпляр (одну ссылку) объекта несколько раз? –

+0

Различные ссылки (два разных объекта), но они имеют одинаковые значения свойств, поэтому, если на них была выполнена проверка равенства, они будут соответствовать. Метод Remove проверяет равенство, поэтому он удаляет только первый экземпляр, на который он попадает, вместо того, который выбрал пользователь. – XSL

ответ

2

Не уверен, что это вам поможет или нет, но если вы используете общий подход MVVM в своем приложении, у вас обычно будет модель представления для каждого элемента в списке. С этим вы можете определить свойство IsSelected на модели представления позиции и привязке данных к элементу управления LongListSelector. Затем, когда вам нужно удалить предметы, вы найдете все предметы с IsSelected, установленными на true.

В качестве простого примера, в одном из моих моделей пункт Вид у меня есть это свойство:

/// <summary> 
    /// Is this location selected in the UI? 
    /// </summary> 
    public bool Selected 
    { 
     get { return _selected; } 
     set 
     { 
      if (value != _selected) 
      { 
       _selected = value; 
       RaisePropertyChanged("Selected"); 
      } 
     } 
    } 

Затем в моем шаблоне XAML элемента У меня есть элемент управления флажок, связанный, как это:

<CheckBox Grid.Column="0" Grid.RowSpan="2" IsChecked="{Binding Path=Selected,Mode=TwoWay}" 
      VerticalAlignment="Top" Margin="0,-10,0,0"/> 

Надеюсь, это поможет.

Смежные вопросы