C# 从treeview上的数据绑定treeview获取类属性单击

C# 从treeview上的数据绑定treeview获取类属性单击,c#,wpf,xaml,treeview,treeviewitem,C#,Wpf,Xaml,Treeview,Treeviewitem,我遇到了一个问题,不管我在网上冲浪多少次,也不管我在网上的其他地方,我似乎都找不到一个正确的答案。我有一个树状视图,它绑定到列表,我的类别类如下 public class Category { public string Name { get; set; } public dynamic SearchEngine { get; set; } } public class SearchEngine { public virtual string IKey { get; s

我遇到了一个问题,不管我在网上冲浪多少次,也不管我在网上的其他地方,我似乎都找不到一个正确的答案。我有一个树状视图,它绑定到
列表
,我的
类别
类如下

public class Category
{
    public string Name { get; set; }
    public dynamic SearchEngine { get; set; }
}

public class SearchEngine
{
    public virtual string IKey { get; set; }
    public virtual string IValue { get; set; }
    public virtual string icon { get; set; }
}
<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>
现在,TreeView正在使用一个自定义模板,如下所示:

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>
正如您所看到的,我已经在我的TreeView对象中绑定了
TreeView项,并且我能够在更改选择时提醒messagebox。我想在选择时获取
IValue
,并将其传递给另一个函数进行处理。我查看了SelectedItem,但似乎找不到一种方法来访问底层数据源

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>
有什么建议吗?谢谢。

你试过这个吗:

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemList}" ItemTemplate="{StaticResource ResourceKey=childrenDataTemplate}">
        <Border BorderThickness="0" Margin="5">
            <TextBlock Text="{Binding Path=Name}" />
        </Border>
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
                <Setter Property="FontWeight" Value="Normal"/>
                <Setter Property="Focusable" Value="True"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItem}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Focusable" Value="False"/>
    </Style>
</TreeView.ItemContainerStyle>
void HandleSelected(object sender, RoutedEventArgs e)
    {
        var tvi = e.Source as TreeViewItem;
        var category = tvi.DataContext as Category;
        ...
    }

铸造怎么样?如果您知道基础项数据的类型,只需将其转换为该类型即可。@KingKing Yeah证明有效,谢谢。虽然我不得不使用
e.OriginalSource
,但这是有效的,我接受作为答案,谢谢。