ListView鼠标悬停在MVVM上

时间:2015-08-20 17:40:11

标签: c# .net wpf mvvm

使用MVVM模式获取用户悬停的项目的最简单方法是什么?

我看到ListView上有很多关于鼠标输入的事件,但我找不到可绑定的属性。

1 个答案:

答案 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。