2011-10-28 11 views
7

私のアプリケーションにWPFおよびPRISMフレームワークを使用しています。私が使用しているパターンはMVVM(Model - View - ViewModel)であり、ViewのコードビハインドからMouseLeftButtonUpイベントをViewModelに持ち込みようとしています(イベントはMVVMルールに従います)。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(コードビハインド):

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:それを行うと、(オブジェクト送信者)パラメータでも動作しますか?私はちょうどクリックしたActiveCellを取得するために私のViewModelにDataGridが必要です。

EDIT:

イベント結合は、コマンドで働いていました!

私は自分のデータグリッドでこれを持っている:

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

私はViewModelににTagプロパティをバインドするにはどうすればよいですか?私はそれが既にViewModelからバインドされていることを知っていますが、値が配列/リストと列ごとに異なることがわかります。

答えて

10

InvokeCommandActionは、バインドしたとき(EmployeeGrid_MouseLeftButtonUp)のイベントハンドラではなく、ICommandにバインドする必要があります。

ですから、ビューモデルでコマンドを導入し、それに特異的に結合することができます。

ビューモデル:

public ICommand SomeActionCommand { get; set; } 

XAML:完全に働いた

<i:InvokeCommandAction Command="{Binding SomeActionCommand}" /> 
+0

おかげで、!また、ViewModelでアクセスできるように、コマンド(パラメータなど)とともにDataGridを渡すことを提案していますか? –

+0

@ Jelle Capenberghs:いいえ、ViewModelのUIコンテナ全体を渡すことはMVVMのアプローチではありません.ViewModelは特定のUI実装について何も知ってはいけません(今日はあなたを廃止しましたが、明日はおそらく明日です--ViewViewはViewModelをリファクタリングする必要があります。間違っている)。このコマンドで何をしようとしていますか? – sll

+0

ViewModelで必要な情報を持つTextBlockがCellに含まれているため、ViewModelでクリックしたCellを取得する必要があります。 - ICommandが私の必要としていたものだったので、すでに答えとしてマークされています! –

関連する問題