在viewModel中反应鼠标单击事件而不是代码隐藏

时间:2015-07-14 15:11:53

标签: c# wpf mvvm

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

我有类似下面的代码来处理列表视图上的鼠标点击但我已经读过iot会更好地在视图模型中处理这个而不是后面的代码吗?

我的代码如下

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);
        }
    }
}

注意:Record是一个ListViewItem

谢谢, 尼克

1 个答案:

答案 0 :(得分:2)

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

XAML:

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

视图模型:

private Record _selectedRecord;
public Record SelectedRecord
{
    get { return _selectedRecord; }
    set
    {
        _selectedRecord = value;
        OnPropertyChanged();

        // Call your DoWork() method here
        this.DoWork();
    }
}