Treeview selectedItem 在启动时突出显示

Posted

技术标签:

【中文标题】Treeview selectedItem 在启动时突出显示【英文标题】:Treeview selectedItem highlight on startup 【发布时间】:2016-03-27 16:25:57 【问题描述】:

我的 xaml 中有一个树视图,如下所示。我通过交互来使用选中的项目并绑定事件。

    <DataTemplate x:Key="TreeTemplate">
        <TreeView Name="TreeView" ItemsSource="Binding ItemList" ItemTemplate="StaticResource ChildTemplate">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectedItemChanged">
                    <i:InvokeCommandAction
                        Command="Binding SetSelectedItemCommand"
                        CommandParameter="Binding SelectedItem, ElementName=TreeView"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </TreeView>
    </DataTemplate>

除了第一次加载应用程序时,这一切都很好。即使在启动时设置了 SelectedItem 属性,树视图也不会突出显示该项目,除非触发了导致 SelectedItemChanged 事件的鼠标事件。 关于如何做到这一点的任何想法?

我的数据上下文在 xaml 后面的代码中

        myView = new MyViewModel();    
        this.DataContext = myView;

        InitializeComponent();

【问题讨论】:

【参考方案1】:

这将起作用:

<DataTemplate x:Key="TreeTemplate">
    <TreeView Name="TreeView" ItemsSource="Binding ItemList" ItemTemplate="StaticResource ChildTemplate">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectedItemChanged">
                <i:InvokeCommandAction
                    Command="Binding SetSelectedItemCommand"
                    CommandParameter="Binding SelectedItem, ElementName=TreeView"/>

             <i:EventTrigger EventName="Loaded">
                <i:InvokeCommandAction
                    Command="Binding SetSelectedItemCommand"
                    CommandParameter="Binding SelectedItem, ElementName=TreeView"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TreeView>
</DataTemplate>

【讨论】:

这是一个非常好的建议。我以前没想过,但第二个问题是在我能够设置我的属性之前调用了“加载”。 Loaded 在您的 ViewModels 构造函数之后调用,在您的 Viewmodels 构造函数中您应该完成所有绑定。 我正在我的构造函数中加载一个文件。根据文件加载属性。在代码可以设置属性之前,调用了加载的事件,此时属性为空 如何为视图定义数据上下文? 根据您的代码,您的 viewModel 应该在加载 UI 之前构建,如果您在 ViewModel 构造函数和 Loaded 事件中都设置了一些断点,那么您可以看到哪个是第一个被调用的。我还是觉得有其他问题

以上是关于Treeview selectedItem 在启动时突出显示的主要内容,如果未能解决你的问题,请参考以下文章

在应用了 HierarchicalDataTemplate 的 WPF TreeView 中绑定 SelectedItem

有关TreeView.SelectedItem可绑定性的MSDN文档

WPF MVVM TreeView SelectedItem

Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误

带有 TextBox 子项的 TreeView SelectedItem 行为

TreeView SelectedItem 返回类型