在viewModel中响应鼠标点击事件,而不是后面的代码

本文关键字:代码 事件 viewModel 响应 鼠标 | 更新日期: 2023-09-27 18:02:50

我有一个WPF应用程序,其中列表视图是通过ViewModel设置的。

我有一些像下面的代码来处理一个鼠标点击列表视图,但我已经读过物联网会更好地处理这个视图模型而不是背后的代码?

我有如下代码

XAML:

<ListView ... PreviewMouseLeftButtonUp="listView_Click"> ...

背后的代码:

private void listView_Click(object sender, RoutedEventArgs e)
{
    var item = (sender as ListView).SelectedItem;
    if (item != null)
    {
        ...
    }
}

我试图有像下面的代码,但有一种方法将其移动到视图模型完全避免后面的代码?

public void listView_Click(object sender,RoutedEventArgs e)
{
    var item = (sender as ListView).SelectedItem;
    if (item != null)
    {
        Record record = item.DataContext as Record;
        if (record != null)
        {
            MyViewModel viewModel = ((MyViewModel)this.DataContext);
            var result = viewModel.performWork(record);
        }
    }
}

注意:记录是一个ListViewItem

谢谢,尼克

在viewModel中响应鼠标点击事件,而不是后面的代码

ListView.SelectedItem属性绑定到ViewModel中Record类型的属性(例如SelectedRecord),并在选中时执行您的工作记录变化:

XAML:

<ListView .... 
          SelectedItem="{Binding SelectedRecord}"/>

ViewModel:

private Record _selectedRecord;
public Record SelectedRecord
{
    get { return _selectedRecord; }
    set
    {
        _selectedRecord = value;
        OnPropertyChanged();
        // Call your DoWork() method here
        this.DoWork();
    }
}