0

我正在使用 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 方法中删除此事件处理程序。

4

1 回答 1

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>
于 2014-07-15T06:33:45.417 回答