【问题标题】:Casting Event Sender to Underlying DataTemplate Type将事件发送者转换为底层 DataTemplate 类型
【发布时间】:2011-10-28 05:31:40
【问题描述】:

我有一个显示“节点”的 wpf 应用程序:

<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。有没有办法让事件的发送者作为我的底层模板类型(节点)?

非常感谢!

【问题讨论】:

    标签: c# wpf checkbox treeview datatemplate


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,你拯救了我的一天;)
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多