我正在使用WPF和PRISM框架开发我的应用程序。我使用的模式是MVVM(Model-View-ViewModel),并且我正在尝试将代码后台中的MouseLeftButtonUp事件从View传递到ViewModel中(以便事件符合MVVM规则)。目前我有以下代码:
View.xaml:
<DataGrid x:Name="employeeGrid" Height="250" Margin="25,0,10,0" ItemsSource="{Binding DetacheringenEmployeesModel}" IsReadOnly="True" ColumnHeaderStyle="{DynamicResource CustomColumnHeader}" AutoGenerateColumns="False" RowHeight="30">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding EmployeeGrid_MouseLeftButtonUp}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
View.xaml.cs(代码后台):
public partial class UC1001_DashBoardConsultants_View
{
public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
ViewModel.cs:
public void EmployeeGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
// insert logic here
}
主要思路是,当我点击DataGrid中的单元格时,事件就会触发。我先在代码后台尝试了一下,它可以工作。我已经使用了EventTriggers,但是当我调试并点击单元格时,我的调试器并没有进入该方法。
有人有什么想法如何解决这个问题吗?提前致谢!
PS:如果我这样做,(object sender)参数也可以工作吗?因为我需要在ViewModel中得到我刚刚点击的ActiveCell所在的DataGrid。
编辑:
使用Command来绑定事件成功了!
我在DataGrid中添加了以下内容:
<DataGridTextColumn Header="Okt" Width="*" x:Name="test" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>
如何将标签属性绑定到ViewModel?我知道它已经从ViewModel绑定,但是您可以看到该值来自数组/列表,并且每列的值不同。
<TextBox Text="{Binding ViewModelProperty}" >
,而不是使用事件的复杂情况。 - sll