2015-08-20 71 views
0

獲取用戶使用MVVM模式時懸停的項目的最簡單方法是什麼?ListView鼠標懸停MVVM

我看到在ListView上有很多關於鼠標輸入的事件,但是我找不到可綁定的屬性。

+0

想要在c#中獲取項目?或者只是在xaml代碼中設置它的樣式? – Slashy

+0

我需要它在我的viewmodel。 – Hristo

+1

IMO,懸停是你用鼠標和屏幕做的事情,因爲它們是視圖相關的。這些東西真的不應該在你的虛擬機中重要嗎? – Kcvin

回答

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> 

在後面的代碼中,將關閉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); 
       } 

      } 
     } 
    } 

因此,這將斷火,你應該安裝在你的視圖模型通過在ListBoxItem中的的DataContext ICommand的屬性。