Привязать событие к ViewModel - PullRequest
7 голосов
/ 28 октября 2011

Я использую WPF и PRISM Framework для своего приложения. Я использую шаблон 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: он также работает с параметром (отправитель объекта), когда я так делаю? Поскольку мне нужна DataGrid в моей ViewModel, чтобы получить ActiveCell, на который я только что нажал.

EDIT:

Привязка событий работала с Командой!

У меня есть это в моей DataGrid:

<DataGridTextColumn Header="Okt" Width="*" x:Name="test" >
     <DataGridTextColumn.ElementStyle>
           <Style TargetType="{x:Type TextBlock}">
             <Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>

Как я могу привязать свойство Tag к ViewModel? Я знаю, что он уже связан с ViewModel, но, как вы можете видеть, значение приходит из массива / списка, и для каждого столбца значение отличается.

1 Ответ

10 голосов
/ 28 октября 2011

InvokeCommandAction требует, чтобы ICommand был привязан не как обработчик события, как вы привязали (EmployeeGrid_MouseLeftButtonUp).

Таким образом, вы можете ввести команду в ViewModel и привязать ее:

Просмотр модели:

public ICommand SomeActionCommand { get; set; }

XAML:

<i:InvokeCommandAction Command="{Binding SomeActionCommand}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...