2014-12-21 4 views
1

У меня есть рабочий MouseLeftButtonUp связывания, что я работает с View.cs, но что я не могу работать с Viewmodel.csКак переписать привязку DataGrid MouseLeftButtonUp к MVVM?

XAML:

<DataGrid x:Name="PersonDataGrid" AutoGenerateColumns="False" 
    SelectionMode="Single" SelectionUnit ="FullRow" ItemsSource="{Binding Person}" 
    SelectedItem="{Binding SelectedPerson}" 
    MouseLeftButtonUp="{Binding PersonDataGrid_CellClicked}" > 

View.cs:

private void PersonDataGrid_CellClicked(object sender, MouseButtonEventArgs e) 
    { 
     if (SelectedPerson == null) 
      return; 

     this.NavigationService.Navigate(new PersonProfile(SelectedPerson)); 
    } 

Метод PersonDataGrid_CellClick не будет работать из ViewModel.cs. Я пробовал читать о Blend System.Windows.Interactivity, но не пробовал, так как я хотел избежать этого, пока я все еще изучаю MVVM.

Я пробовал DependencyProperty и пытался привязать RelativeSource, но не смог получить PersonDataGrid_CellClick, чтобы перейти к UserProfile UserControl.

ответ

2

с помощью сборки Blend System.Windows.Interactivity вы не нарушаете ни один из принципов MVVM, если никакая логика, связанная непосредственно с представлением, не используется внутри определенной команды в виртуальной машине, здесь, как использовать ее с MouseLeftButtonUp Событие:

<DataGrid> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonUp" > 
       <i:InvokeCommandAction 
         Command="{Binding MouseLeftButtonUpCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </DataGrid> 

и в ViewModel определяют MouseLeftButtonUpCommand:

private RelayCommand _mouseLeftButtonUpCommand; 
    public RelayCommand MouseLeftButtonUpCommand 
    { 
     get 
     { 
      return _mouseLeftButtonUpCommand 
       ?? (_mouseLeftButtonUpCommand = new RelayCommand(
       () => 
       { 
        // the handler goes here 
       })); 
     } 
    } 
+0

Спасибо. Теперь кнопка мыши вызывает логику обработчика. У меня есть еще одна проблема, так как я переключился на UserControl вместо страницы, и я не понимал, что это нарушает использование NavigationService. –

Смежные вопросы