我有一个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类型,因此无法强制转换。有没有办法让事件的发件人作为我的基础模板类型(节点)?
非常感谢!
答案 0 :(得分:3)
您的节点将作为DataContext使用,如下所示:
var checkBox = sender as CheckBox;
var node = checkBox.DataContext as Node;
这就是你的XAML中的绑定也在使用。