Wpf 如何在行为中附加到DataGridCell.Selected事件?
我正在使用DataGridCell.Slected在我的代码背后做一些事情Wpf 如何在行为中附加到DataGridCell.Selected事件?,wpf,datagrid,behavior,datagridcell,Wpf,Datagrid,Behavior,Datagridcell,我正在使用DataGridCell.Slected在我的代码背后做一些事情 <DataGrid DataGridCell.Selected="ArticlesGrid_OnSelected> 但是我想改用行为,我不知道如何在我的行为中附加到事件 public class MyBehavior : Behavior<DataGrid> { protected override void OnAttached() {
<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()
{
}
}
但是我不知道如何在OnDetaching方法中删除此事件处理程序。您可以在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
我知道AssociatedObject,但我不确定您的事件是否与我在XAML中使用的事件相同。没错,这是一个不同的事件。从行为中订阅它并不简单,因为它不在可视化树上,而不是DataGrid上。要做到这一点,你可以你事件触发我使用事件管理器来获得相同的事件,但我不知道这是否是一个好方法编辑我的第一篇文章来显示它。使用行为会很好,因为我希望在其他一些数据网格中使用这种行为,因为a行为很好并且易于附加。那么在这种情况下,EventTrigger应该是您真正要使用的行为。据我所知,我希望在这一点上得到纠正。如果某个元素路由事件属于另一种类型,则不能订阅该事件,除非您继承该元素并从其中订阅该事件。如果事件属于DataGrid而不是DataGridCell,则不会出现此问题。谢谢,我将使用EventTriggers测试它:
EventManager.RegisterClassHandler(AssociatedType, DataGridCell.SelectedEvent, new RoutedEventHandler(ArticlesGrid_OnSelected));
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
}
}
<DataGrid>
<i:Interaction.Behaviors>
<local:MyBehavior/>
</i:Interaction.Behaviors>
</DataGrid>