c# - TreeViewItem 展开事件
问题描述
您好,我正在使用一个WPF
应用程序,我希望在扩展TreeView
. 我知道目前还没有活动,但我不确定如何以我这样做的方式添加一个活动,因此我们将不胜感激。
这是xaml。
<TreeView x:Name="TreeView" Margin="20">
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<!-- Some style -->
</Style>
<DataTemplate DataType="{x:Type models:DirectoryPathItem}">
<!-- some template -->
</DataTemplate>
</TreeView.Resources>
</TreeView>
我正在加载后面的代码。
private void LoadBaseDirectories()
{
var directoryInfo = new DirectoryInfo(@"C:\");
var directories = directoryInfo.GetDirectories();
foreach (var directory in directories)
{
TreeView.Items.Add(new DirectoryPathItem()
{
Children = new ObservableCollection<PathItem>(),
Path = directory.FullName,
Header = directory.Name
});
}
}
有没有一种方法可以在扩展之前调用事件,TreeViewItem
以便加载孩子?
解决方案
在实际展开之前加载子项可能会导致用户不理解列表为空的原因的无响应 UI。
我建议添加一个代表后台任务的项目(例如:某种加载微调器),并在发现它们后立即添加适当的项目。
完成后,您可以删除加载微调器项目。
这样,您将不需要新事件,并且用户将了解正在发生的事情。
推荐阅读
- web-applications - 如何将 .net 框架控制台应用程序转换为 Web 应用程序
- android - Android - 意图 VIEW_EVENT 意图打开日期错误的事件 (1.1.1970)
- python - 递归混淆快速排序
- javascript - Vue 没有对计算的 props 更改做出反应
- flutter - 看不懂这个 Flutter 闭包函数代码?
- reactjs - 滚动到下一部分
- javascript - jQuery查找具有动态添加的类名的元素
- javascript - 如何管理 react-native codepush 版本?
- laravel - 为什么我的数据没有存储在 laravel 的数据库中?
- recaptcha - 我想更改 recaptcha 方法,而不是复选框,只需单击“我不是机器人”