如何在 WPF 中获取复选框上的当前元素

How to get current element on checkbox in WPF

有什么方法可以在 "Checked" 事件触发时获取代码后面的当前 "MyClass" 元素,代码如下:

<TreeView Name="TreeViewName">
            <TreeView.Resources >
                <HierarchicalDataTemplate DataType="{x:Type local:MyClass}" ItemsSource="{Binding Children}">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding Checked}" VerticalAlignment="Center" Checked="OnExplorerCheck" ></CheckBox>
                        <Image Source="{Binding Icon}" Height="15" Margin="5,0,0,0"></Image>
                        <Label Content="{Binding Name}"></Label>
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>

我希望能够在选中复选框后获取树视图当前元素的所有数据。请注意 "MyClass" 可以有任意数量的属性,我希望能够访问所有这些属性。我有什么办法可以做到这一点吗?

我建议坚持使用 MVVM 方法并在项目的 ViewModel 中处理选中状态的更改,但在代码背后可以通过路由事件实现您想要的内容。

在您的 TreeView 中订阅 CheckBox.Checked 路由事件:

<TreeView Name="TreeViewName" CheckBox.Checked="TreeViewName_Checked">

在后面的代码中,您可以作为 OriginalSource 字段到达相应的 CheckBox,并访问其 DataContext,这将是 MyClass 的一个实例:

    private void TreeViewName_Checked(object sender, RoutedEventArgs e)
    {
        var checkBox = e.OriginalSource as CheckBox;

        MyClass dataContext = checkBox?.DataContext as MyClass;

        if (dataContext != null)
        {
            // Do something with MyClass instance
        }
    }