Для того чтобы получить элемент ListView при наведении на него курсора, используя MVVM (Model-View-ViewModel), нужно выполнить несколько шагов.
1. Начнем с создания класса ViewModel, который будет представлять логику и данные для нашего представления (View). В этом классе нам понадобится создать свойство SelectedItem, которое будет хранить выбранный элемент в ListView. Также добавим свойство IsMouseOver, которое будет указывать, наведен ли курсор на ListView.
public class MyViewModel : INotifyPropertyChanged { private object _selectedItem; private bool _isMouseOver; public object SelectedItem { get { return _selectedItem; } set { _selectedItem = value; OnPropertyChanged(nameof(SelectedItem)); } } public bool IsMouseOver { get { return _isMouseOver; } set { _isMouseOver = value; OnPropertyChanged(nameof(IsMouseOver)); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
2. В представлении (View) создадим ListView и привяжем его свойство SelectedItem к свойству SelectedItem в нашей ViewModel. Кроме того, мы также свяжем свойство IsMouseOver в ListView с свойством IsMouseOver в ViewModel.
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" IsMouseOver="{Binding IsMouseOver}"> <ListView.ItemTemplate> <!-- шаблон отображения элемента списка --> </ListView.ItemTemplate> </ListView>
3. Для обновления свойства IsMouseOver во ViewModel при наведении курсора на ListView добавим обработчики событий MouseEnter и MouseLeave. В XAML разметке добавьте привязку к командам во ViewModel.
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" IsMouseOver="{Binding IsMouseOver}" MouseEnter="{Binding MouseEnterCommand}" MouseLeave="{Binding MouseLeaveCommand}"> <ListView.ItemTemplate> <!-- шаблон отображения элемента списка --> </ListView.ItemTemplate> </ListView>
4. Добавим команды в нашу ViewModel, которые будут вызываться при событиях MouseEnter и MouseLeave.
public class MyViewModel : INotifyPropertyChanged { //... public ICommand MouseEnterCommand { get; } public ICommand MouseLeaveCommand { get; } public MyViewModel() { MouseEnterCommand = new RelayCommand(MouseEnter); MouseLeaveCommand = new RelayCommand(MouseLeave); } private void MouseEnter() { IsMouseOver = true; } private void MouseLeave() { IsMouseOver = false; } }
В результате, при наведении курсора на ListViewItem в ListView, свойство IsMouseOver будет обновляться в ViewModel. Выбранный элемент будет храниться в свойстве SelectedItem, которое также привязано к ListView. Вы можете использовать эти свойства дальше для предоставления дополнительной информации и обработки в вашей ViewModel.