Korzystam z ram WPF i PRISM dla mojej aplikacji. Wzorzec, którego używam, to MVVM (Model - Widok - ViewModel) i próbuję przenieść zdarzenie MouseLeftButtonUp z kodu z tyłu w widoku do ViewModel (aby zdarzenie było zgodne z regułami MVVM). Na razie mam to:Powiąż zdarzenia do ViewModel
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 (code-tył):
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
}
Główną ideą jest, że po kliknięciu komórki w DataGrid wydarzenie się uruchomi. Najpierw wypróbowałem to w kodzie, i zadziałało. Dotarłem do tej pory z EventTriggerami, ale kiedy debuguję i klikam komórkę, mój debugger nie wchodzi w tę metodę.
Czy ktoś ma pomysł, jak to naprawić? Z góry dziękuję!
PS: Czy działa również z parametrem (obiekt nadawcy), gdy robię to w ten sposób? Ponieważ potrzebuję DataGrid w moim ViewModelu, aby uzyskać ActiveCell, który właśnie kliknąłem.
EDIT:
Impreza wiążące pracował z poleceniem!
mam to w moim DataGrid:
<DataGridTextColumn Header="Okt" Width="*" x:Name="test" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>
Jak mogę powiązać właściwość tag do ViewModel? Wiem, że jest już związany z ViewModel, ale jak widać wartość pochodzi z tablicy/listy i na kolumnę wartość jest inna.
Dzięki, że pracował idealnie! Czy masz również sugestię, aby przekazać DataGrid wraz z poleceniem (jako parametr lub coś podobnego), aby uzyskać do niego dostęp w moim ViewModelu? –
@Jelle Capenberghs: nie, przekazanie całego kontenera UI w ViewModel nie jest podejściem MVVM, ViewModel nie powinien nic wiedzieć o konkretnej implementacji interfejsu użytkownika (dziś nie używasz go, ale może jutro - TreeView, więc ViewModel musi być refaktoryzowany, to jest źle). Co próbujesz zrobić w tym poleceniu? – sll
Potrzebuję uzyskać komórkę, którą kliknąłem w moim ViewModelu, ponieważ komórka zawiera TextBlock z informacjami, których potrzebuję w ViewModelu. - Już oznaczony jako odpowiedź, ponieważ ICommand była przede wszystkim tym, czego potrzebowałem! –