Как переписать эту привязку DataGrid MouseLeftButtonUp к MVVM?

1

У меня есть рабочая привязка 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.

Теги:
wpf
mvvm
datagrid
mouseclick-event

1 ответ

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 вместо Page, и я не осознавал, что это нарушает использование NavigationService.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню