如何重写此 DataGrid MouseLeftButtonUp 绑定到 MVVM

本文关键字:MouseLeftButtonUp DataGrid 绑定 MVVM 何重写 重写 | 更新日期: 2023-09-27 18:35:02

我有一个有效的 MouseLeftButtonUp 绑定,我从视图工作.cs但我无法从视图模型工作.cs

XAML:

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

查看.cs:

    private void PersonDataGrid_CellClicked(object sender, MouseButtonEventArgs e)
    {
        if (SelectedPerson == null)
            return;
        this.NavigationService.Navigate(new PersonProfile(SelectedPerson));
    }

PersonDataGrid_CellClicked方法在视图模型.cs中不起作用。我尝试阅读有关Blend System.Windows.Interactivity的信息,但没有尝试过,因为我想在学习MVVM时避免它。

我已经尝试了DependencyProperty并尝试了RelativeSource绑定,但无法PersonDataGrid_CellClicked导航到PersonProfile UserControl。

如何重写此 DataGrid MouseLeftButtonUp 绑定到 MVVM

通过使用 Blend System.Windows.Interactivity 程序集,只要在 VM 中定义的命令中没有使用与视图直接相关的逻辑,您就不会违反任何 MVVM 原则,下面介绍如何将其与 MouseLeftButtonUp 事件一起使用:

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

并在视图模型中定义 MouseLeftButtonUp命令:

private RelayCommand _mouseLeftButtonUpCommand;
    public RelayCommand MouseLeftButtonUpCommand
    {
        get
        {
            return _mouseLeftButtonUpCommand 
                ?? (_mouseLeftButtonUpCommand = new RelayCommand(
                () =>
                {
                    // the handler goes here 
                }));
        }
    }
相关文章:
  • 没有找到相关文章