Как получить элемент ListView при наведении на него курсора используя mvvm?

Для того чтобы получить элемент 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.