将事件发送方强制转换为底层数据模板类型

本文关键字:数据 类型 事件 方强制 转换 | 更新日期: 2023-09-27 18:05:40

我有一个wpf应用程序,它显示一个'Node':

<TreeView HorizontalAlignment="Stretch" Name="treeView1" VerticalAlignment="Stretch" Width="Auto" Margin="6,6,6,35">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Children}">
            <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsThreeState="{Binding HasChildren}" IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Text}" Click="RefreshTree" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

我想做以下事情:

private void RefreshTree(object sender, RoutedEventArgs e)
{
    Node leaf = sender as Node;
    // Do stuff with leaf
}

此强制转换失败,因为对象的类型是Controls.CheckBox。是否有一种方法来获得事件的发送方作为我的底层模板类型(节点)?

多谢!

将事件发送方强制转换为底层数据模板类型

您的节点将作为DataContext可用,如下所示:

var checkBox = sender as CheckBox;
var node = checkBox.DataContext as Node;

这也是XAML中的绑定所使用的