TreeView SelectedItem返回类型

时间:2012-02-28 11:42:12

标签: wpf treeview selecteditem treeviewitem

我有一个TreeView,它使用HierarchicalDataTemplate和视图模型作为不同节点上的数据上下文。我想从TreeView.SelectedItem访问一些TreeViewItem属性 - 但这会返回一个视图模型对象而不是TreeViewItem。
如何将TreeViewItem引用到选定的项目?
(我在SelectedItemChanged处理程序中遇到同样的问题 - 对象发送者是一个视图模型 - 如何获取TreeViewItem?)
[有一个TreeView属性SelectedContainer返回一个TreeViewItem,但它不可访问:-(]

对于世界粮食计划署来说,这种令人沮丧的事情很容易被这种“细节”所困扰,似乎必须有一个简单/明显的解决方案,但是......

3 个答案:

答案 0 :(得分:1)

将TreeView绑定到数据上下文后,您将始终返回视图模型对象。如果要操作TreeViewItem对象以响应事件,则需要通过绑定来完成。例如,可以使用样式将IsExpanded,IsSelected属性绑定到视图模型属性。以下代码自动加粗选定的树项目,并将上述属性绑定到视图模型属性,我可以在其中操作/读取它们。

        <TreeView x:Name="treeEquipment"
              ItemsSource="{Binding RootEquipment}" 
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <EventSetter Event="TreeViewItem.MouseRightButtonDown"
                             Handler="TreeViewItem_MouseRightButtonDown"/>
                <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                <Setter Property="FontWeight" Value="Normal" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontWeight" Value="Bold" />
                    </Trigger>
                </Style.Triggers>
            </Style> 
        </TreeView.ItemContainerStyle>

答案 1 :(得分:0)

我试图设置的属性是IsSelected我总是想要假,因为我管理多个选择我自己。遵循StrayPointers建议,使用视图模式的绑定:

class TreeNodeViewMode {
    public bool no_selection {
        get { return false; }
        set { RaisePropertyChanged(); }
    }
}

XAML:

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsSelected" Value="{Binding no_selection, Mode=TwoWay}" />
    </Style>
</TreeView.ItemContainerStyle>

答案 2 :(得分:0)

另一种方法是处理TreeViewItem.Selected事件,这与TreeView.SelectedItemChanged(传递视图模型)不同,这确实通过以下方式获取TreeViewItem:

TreeViewItem item = e.OriginalSource as TreeViewItem;

可以设置属性,例如

TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null) {
    item.Focus();
    item.IsSelected = false;
}