如何在 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
}
}
有什么方法可以在 "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
}
}