gpt4 book ai didi

wpf TreeViewItem BringIntoView 并不总是有效

转载 作者:行者123 更新时间:2023-12-04 06:33:34 24 4
gpt4 key购买 nike

在我的 MVVM 应用程序中,我有一个树 View ,应该在选择时将树 View 项带入 View 。树 View 表示数据库中的记录。每个树 View 项通过在选择时展开项来按需加载其子项。

树 View 样式定义如下:

  <TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
...
<EventSetter Event="Selected" Handler="OnTreeViewItemSelected"/>

处理程序定义如下:
private void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
{
if (!Object.ReferenceEquals(sender, e.OriginalSource))
{
return;
}
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null)
{
EventHandler eventHandler = null;
eventHandler = new EventHandler(delegate
{
treeData.LayoutUpdated -= eventHandler;
item.BringIntoView();
});
treeData.LayoutUpdated += eventHandler;
}
}

这对于已经加载的项目非常有效。

[编辑:实际上所选项目的父级必须展开而不是仅加载]

如果它们被加载了,treeviewitems 将被迭代,直到找到所寻找的项目,找到的项目被选中并且上面的处理程序成功地将它带入 View 。

问题在于尚未加载的项目。在这些情况下,我的代码获取所寻找项目的祖先记录,通过它们迭代扩展项目(并因此加载子项),直到它到达所寻找的项目。这已成功选择,但未显示。

有谁知道如何解决这个问题?

[更新]
在 TreeViewItemViewModel 中:
public bool IsSelected
{
get { return _isSelected; }
set
{
if (value != _isSelected)
{
_isSelected = value;

if (value == true)
IsExpanded = value;

this.OnPropertyChanged("IsSelected");
}
}
}

public bool IsExpanded
{
get { return _isExpanded; }
set
{
if (_isExpanded == value)
return;

_isExpanded = value;
this.OnPropertyChanged("IsExpanded");

if (_isExpanded &&
_parent != null &&
_parent.IsExpanded == false)
_parent.IsExpanded = true;

LoadChildren();
}
}

LoadChildren() 方法通过使用标志来处理 child 是否需要加载。

项目容器样式

Setter Property="IsExpanded"Value="{Binding IsExpanded, Mode=TwoWay}"
Setter Property="IsSelected"Value="{Binding IsSelected, Mode=TwoWay}"

最佳答案

this可能会解决你的问题

并建立在 this关于将 MVVM 用于 TreeView 的文章

编辑:
还有可能您的 treeviewitemcontainers 尚未创建。那么你必须摆弄 TreeViews ItemContainerGenerator

关于wpf TreeViewItem BringIntoView 并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com