Wpf TreeView 延时加载实现
来源:互联网 发布:小型企业网络搭建 编辑:程序博客网 时间:2024/06/06 15:17
树状控件在程序中经常用到。 但如果树状结构比较大,数据较多,将所有数据都加载后再绑定到控件,会影响软件的运行速度。比较理想的解决方法是延时加载,在展开树的时候再加载数据。
下面是树状控件延时加载数据的实现方式:
ViewModel:
public class TaskFolderVM:WorkspaceVM
{
#region Data&Properties
TaskFolder _taskFolder;
public TaskFolderVM Parent { get; set; }
//增加 一个静态的虚拟子项;
static TaskFolderVM _dummyChild = new TaskFolderVM();
ObservableCollection<TaskFolderVM> _subFolderVMs;
public ObservableCollection<TaskFolderVM> SubFolderVMs
{
get
{
if (_subFolderVMs == null)
{
this._subFolderVMs = new ObservableCollection<TaskFolderVM>();
this._subFolderVMs.Add(_dummyChild);
// 初始化时只加载虚拟子项
}
return _subFolderVMs;
}
}
bool _isExpanded;
public bool IsExpanded /*与treeview item IsExpanded 双向绑定*/
{
get
{
return this._isExpanded;
}
set
{
if (this._isExpanded == value) return;
this._isExpanded = value;
if (this.SubFolderVMs == null || this.HasDummyChild())
// 当展开treeview时, 再实际加载子项集合;
this.GetSubFolders();
base.OnPropertyChanged("IsExpanded");
}
}
// 判断是否包含虚拟子项
private bool HasDummyChild()
{
return (this._subFolderVMs.Count == 1 && this._subFolderVMs.Contains(_dummyChild));
}
this.GetSubFolders()
{
/* 在此加载子项*/
}
}
View:
<TreeView ItemsSource="{Binding WorkingFolderRoots}"
SelectedItemChanged="TreeView_SelectedItemChanged"
>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<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>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubFolderVMs}" >
<Grid Margin="5,0" Height="30">
<ContentPresenter Content="{Binding Name}"
Margin="5,0" VerticalAlignment="Center"
/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
- Wpf TreeView 延时加载实现
- jquery实现图片延时加载
- hibernate如何实现延时加载
- 实现延时加载的listview
- WPF 中TreeView 右键选中实现
- WPF的TreeView中实现右键选定
- 采用MVVM方式实现WPF的TreeView
- wpf实现metrol风格的Treeview样式
- WPF的Treeview控件实现CheckBox
- wpf treeview
- ScheduledThreadPoolExecutor实现定时器和延时加载功能
- jQuery lazyload插件实现图片延时加载
- 实现页面图片的延时异步加载
- Fragment的setUserVisibleHint方法实现延时加载
- 实现界面图片的延时加载
- WPF 实现加载等待状态
- 延时加载
- 延时加载
- 对SharePoint 2007数据库中一些数据表的使用
- SharePoint对象模型性能考量
- 排序小结之插入排序及其升级版
- MYSQL中replace into的用法
- 初始化domain model
- Wpf TreeView 延时加载实现
- [转载] Windows 平台下 CodeBlocks 连接 MySQL 数据库
- uva-350
- mysql merge表介绍
- 用Gradle 构建你的android程序
- layout
- MATLAB入门教程
- C++ 矩阵运算工具箱Eigen
- WebLogic优化大全