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 绑定导致混合错误