2014-07-14 37 views
0

我正在使用DataGridCell.Slected在我的代碼背後做一些事情。如何在行爲中附加DataGridCell.Selected事件?

​​

在我後面的代碼我有一個像

private void ArticlesGrid_OnSelected(object sender, RoutedEventArgs e) 
{ 
    .... 
} 

的方法,但我想用一種行爲,而不是和我沒有任何想法如何連接到我的行爲的事件。

public class MyBehavior : Behavior<DataGrid> 
    { 
     protected override void OnAttached() 
     { 
      //don't know how to attach to the event 
     } 

     protected override void OnDetaching() 
     { 

     } 
} 

對於測試,我在我的OnAttached方法中使用了這段代碼。

EventManager.RegisterClassHandler(AssociatedType, DataGridCell.SelectedEvent, new RoutedEventHandler(ArticlesGrid_OnSelected)); 

但我不知道如何刪除我的OnDetaching方法中的這個事件處理程序。

回答

0

您在AssociatedObject屬性中獲取行爲的目標。所以,你可以做這樣的事情:

public class MyBehavior : Behavior<DataGrid> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.SelectionChanged += MyEventHandler; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.SelectionChanged -= MyEventHandler; 
    } 

    protected void MyEventHandler(object sender, SelectionChangedEventArgs e) { 
     // Do stuff 
    } 
} 

的XAML

<DataGrid> 
    <i:Interaction.Behaviors> 
     <local:MyBehavior/> 
    </i:Interaction.Behaviors> 
</DataGrid> 
+0

我知道的AssociatedObject的,但我不知道,如果你的事件是我使用的XAML相同。 –

+0

這是事實,這是一個不同的事件。從行爲中訂閱它並不那麼簡單,因爲它不在可視化樹上(與DataGrid相反)。要做到這一點,你可以你EventTrigger http://www.codeproject.com/Articles/125188/Using-EventTrigger-in-XAML-for-MVVM-No-Code-Behind –

+0

我用EventManager來獲得相同的事件,但我不知道這是否是一個好方法(編輯我的第一篇文章來展示它)。 會很高興使用一種行爲,因爲我想在其他一些DataGrid中有這種行爲,並且行爲很好並且易於附加。 –