使用MVVM模式获取用户悬停的项目的最简单方法是什么?
我看到ListView
上有很多关于鼠标输入的事件,但我找不到可绑定的属性。
答案 0 :(得分:1)
这可以通过做一些事情来完成。您将列表框封装在自己的UserControl中。在此用户控件后面的代码中,您需要声明ICommand类型的依赖项属性。在xaml中,您需要设置一个处理MouseEnterEvent的ListBoxItem样式。
<Grid>
<Grid.Resources>
<Style TargetType="ListBoxItem">
<EventSetter Event="MouseEnter"
Handler="HandleEnter" />
</Style>
</Grid.Resources>
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
在后面的代码中,您将触发您作为DependecyProperty所拥有的ICommand。
public static readonly DependencyProperty SendToViewModelProperty =
DependencyProperty.Register("SendToViewModel", typeof(ICommand), typeof(control), new PropertyMetadata(null));
private void HandleEnter(object sender, MouseEventArgs e)
{
if (SendToViewModel != null)
{
var fe = sender as FrameworkElement;
if (fe != null)
{
if (SendToViewModel.CanExecute(fe.DataContext))
{
SendToViewModel.Execute(fe.DataContext);
}
}
}
}
因此,这将触发您应在viewmodel中设置的ICommand属性,该属性传入ListBoxItem的datacontext。