Я хочу получить выбранный товар от ListView. Моя точка зрения такова:
<ListView Name = "StudentGrid" Grid.Row = "1" Margin = "1,1,1,1" ItemsSource = "{Binding studentList}" SelectedItem = "{Binding selectedItem}">
ViewModel это:
public ObservableCollection<Student> selectedItem { get; set; }
private void DeleteStudent()
{
ObservableCollection<Student> item = selectedItem;
if (selectedItem != null)
{
int a = item.Count;
}
}
Я хочу получить индекс выбранного элемента. Как я могу это сделать?





SelectedItem — это объект в связанной коллекции, поэтому он имеет тип Student, а не ObservableCollection<Student>, как сам список. Кроме того, если вы хотите, чтобы свойство было двусторонним, то есть вы также можете изменить индекс в модели представления, и ListView соответственно обновит выбранный индекс, вы должны реализовать INotifyPropertyChanged.
public class YourViewModel : INotifyPropertyChanged
{
private Student _selectedItem;
// ...other code.
public Student SelectedItem
{
get => _selectedItem;
set
{
if (_selectedItem == value)
return;
_selectedItem = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Чтобы получить индекс, привяжите свойство SelectedIndex к свойству типа int в вашей модели представления.
private int _selectedIndex;
public int SelectedIndex
{
get => _selectedIndex;
set
{
if (_selectedIndex == value)
return;
_selectedIndex = value;
OnPropertyChanged();
}
}
<ListView Name = "StudentGrid" Grid.Row = "1" Margin = "1,1,1,1" ItemsSource = "{Binding studentList}" SelectedIndex = "{Binding SelectedIndex}"/>
Вы также можете связать оба или получить студента по индексу из вашего списка.
var student = studentList[SelectedIndex];
@Fardin Что ты имеешь в виду под обнаружить выбранный элемент? Связанный SelectedItem — это объект Student из вашего списка, то же самое для получения Student по индексу.
Хорошо, если я хочу удалить несколько выбранных элементов, нужно ли мне использовать тип свойства IList<Student> и цикл foreach для удаления элементов?
@Fardin Это сложнее. Вы должны установить SelectionMode на Multiple или Extended. Затем выбранные элементы сохраняются в свойстве SelectedItems, но это свойство не привязывается. Обходные пути см. в статье Как привязать множественный выбор списка к модели представления?.
Спасибо. Как я могу обнаружить selectedItem (для удаления из базы данных)?