LongListSelector получить выбранный индекс

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

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


person XSL    schedule 17.05.2013    source источник
comment
Что вы подразумеваете под «может содержать дубликаты»? Вы имеете в виду, что ваш список содержит один и тот же экземпляр (одну и ту же ссылку) объекта несколько раз?   -  person Alaa Masoud    schedule 18.05.2013
comment
Разные ссылки (два разных объекта), но они имеют одинаковые значения свойств, поэтому, если бы для них выполнялась проверка на равенство, они совпадали бы. Метод Remove проверяет равенство, поэтому он удаляет только первый попавшийся экземпляр, а не тот, который выбрал пользователь.   -  person XSL    schedule 18.05.2013


Ответы (1)


Не уверен, поможет ли это вам или нет, но если вы используете общий подход 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"/>

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

person Mats Lannér    schedule 18.05.2013