如何在行为中附加到DataGridCell.Selected事件?

时间:2014-07-14 13:13:51

标签: wpf datagrid behavior datagridcell

我正在使用DataGridCell.Slected在我的代码后面做一些事情。

<DataGrid DataGridCell.Selected="ArticlesGrid_OnSelected>

在我的代码背后,我有一个类似

的方法
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方法中删除此事件处理程序。

1 个答案:

答案 0 :(得分: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>