Преобразование отправителя события в базовый тип DataTemplate - PullRequest
1 голос
/ 16 августа 2011

У меня есть приложение 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.Есть ли способ получить отправителя события как моего базового типа шаблона (Node)?

Большое спасибо!

1 Ответ

3 голосов
/ 16 августа 2011

Ваш узел будет доступен как DataContext, например:

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

Это то, что также используют привязки в вашем XAML.

...