У меня есть рабочая привязка MouseLeftButtonUp, которую я работаю из View.cs, но я не могу работать с Viewmodel.cs
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_CellClicked не будет работать с ViewModel.cs. Я пробовал читать о Blend System.Windows.Interactivity, но не пробовал, так как я хотел избежать этого, пока я все еще изучаю MVVM.
Я пробовал DependencyProperty и пытался привязать RelativeSource, но не смог заставить PersonDataGrid_CellClicked перейти к UserProfile PersonProfile.
с помощью сборки 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
}));
}
}