我正在尝试创建一个包含所有子文件夹的 treeView,我按照教程(https://xinyustudio.wordpress.com/?s=WPF%20tree)和一个 SO 答案来做到这一点(Binding TreeView with a ObservableCollection),但我有一些问题。
这是我的代码:
<TreeView Name="TreeName" ItemsSource="{Binding ListEtudes}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:FolderItem}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Caption}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type IO::FileInfo}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</TreeView.Resources>
和下面的代码:
public class FolderItem
{
public DirectoryInfo Info { get; set; }
public FolderItem (DirectoryInfo dir)
{
Info = dir;
}
public FolderItem(string path)
{
Info = new DirectoryInfo(path);
}
public string Caption
{
get { return Info.Name; }
}
public IList Children
{
get
{
var subDirItems = new List<FolderItem>();
foreach (var dir in Info.GetDirectories())
subDirItems.Add(new FolderItem(dir));
return new CompositeCollection()
{
new CollectionContainer { Collection = subDirItems },
new CollectionContainer { Collection = Info.GetFiles() }
};
}
}
}
创建ListEtudes
, 调用视图后调用。
private ObservableCollection<FolderItem> listEtudes;
public ObservableCollection<FolderItem> ListEtudes
{
get
{
if (listEtudes.Count == 0)
{
var root = new ObservableCollection<FolderItem>
{
new FolderItem("C:\\temp\\")
};
listEtudes = root;
}
return listEtudes;
}
}
如您所见,我按照教程进行操作,但仍有一些问题:
在 xaml 中:DataType="{x:Type FolderItem}"
--> WPF 项目中不支持 FolderItem--> TomerAgmon1 的解决方案:需要定义命名空间并将其包含在 XAML 中。已编辑。
DataType="{x:Type IO::FileInfo}"
--> 命名空间前缀 IO 未定义
在 C# 中:public IList Children
--> 使用泛型类型“Ilist”需要 1 个类型参数
老实说,我不明白我在这里犯了什么错误,所以任何帮助都会有用:)
关于 xaml 错误: 1. SpecificiyingDataType
是可选的。只有这样 Intellisense 才能与绑定一起工作,并且您可以避免输入错误。2. 在DataType="{x:Type FolderItem}"
您忘记为FolderItem
. 您应该xmlns:myModelNamespace="..."
在 xaml 文件的顶部定义,然后使用DataType="{x:Type myModelNamespace:FolderItem}"
. 3.DataType="{x:Type IO::FileInfo}"
你写的::
不是:
. 那是打字错误吗?另外,我看不出你是否IO
像我之前解释的那样正确引用了命名空间。
关于 C# 错误...您忘记指定IList
. 您应该将属性的类型更改Children
为IList<SomeType>
。
希望能帮助到你
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句