我有一个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
谢谢, 尼克
答案 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();
}
}