如何重写此 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。
通过使用 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
}));
}
}