2015-08-20 6 views
0

Что является самым простым способом получить элемент, который пользователь зависал при использовании шаблона MVVM?ListView mouse hover с MVVM

Я видел, что на ListView есть несколько событий относительно ввода мыши, но я не смог найти свойство связующего.

+0

Хотите получить этот товар в C#? или просто создать его в коде xaml? – Slashy

+0

Мне это нужно в моей модели. – Hristo

+1

IMO, зависание - это то, что вы делаете с помощью мыши и экрана, потому что они связаны с просмотром. Эти вещи действительно не должны иметь значения в вашей виртуальной машине? – Kcvin

ответ

1

Это можно сделать, выполнив несколько действий. Вы будете инкапсулировать список в свой собственный UserControl. В коде, находящемся в этом элементе управления пользователя, вам нужно будет объявить свойство зависимостей типа ICommand. В xaml вам нужно будет настроить стиль ListBoxItem с обработкой MouseEnterEvent.

<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> 

В коде, который находится позади вас, будет отключен ICommand, который у вас есть как DependecyProperty.

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

      } 
     } 
    } 

Так что это будет срабатывать от собственности ICommand, что вы должны настроить в вашей ViewModel, проходящей в DataContext в ListBoxItem.