2014-07-14 2 views
0

DataGridCell.Selected를 사용하여 코드에서 몇 가지 작업을 수행합니다. 내가DataGridCell.Selected 이벤트에 연결하는 방법?

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

같은 방법을하지만 대신에 행동을 사용하려면 내가 어떻게 내 행동의 이벤트에 연결하는 어떤 생각이없는 뒤에

<DataGrid DataGridCell.Selected="ArticlesGrid_OnSelected> 

그리고 내 코드에서

.

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를 사용했지만 그게 좋은 방법인지는 모르겠다. (그것을 보여주기 위해 나의 첫 번째 포스트를 편집했다.) 일부 다른 DataGrids에서이 동작을 사용하고 싶기 때문에 비헤이비어를 사용하는 것이 좋습니다. –