【问题标题】:How to get current element on checkbox in WPF如何在WPF中的复选框上获取当前元素
【发布时间】:2016-03-23 22:49:10
【问题描述】:

有没有办法,在“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”可以有任意数量的属性,我希望能够全部访问它们。我有什么办法可以做到这一点?

【问题讨论】:

    标签: c# wpf treeview treeviewitem


    【解决方案1】:

    我建议坚持使用 MVVM 方法并在项目的 ViewModel 中处理检查状态的变化,但在代码中你想要的可以通过路由事件来实现。

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

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

    在后面的代码中,您可以访问相应的 CheckBox 作为 OriginalSource 字段,并访问其 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
            }
        }
    

    【讨论】:

    • 感谢陌生人!我已经用另一种方式做了,但将来会做得很好!
    猜你喜欢
    • 2014-01-09
    • 2012-06-20
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多