我有一个带有 HierarchicalDataTemplate 的 TreeView,我正在尝试与自定义类型的 ObservableCollection 绑定。但是我的命名空间中可用类型
的 HierarchicalDataTemplate属性的下拉列表不完整,它缺少自定义类型,但列出了同一命名空间中的所有其他自定义类型。命名空间是,并且类位于项目目录的普通 Classes 文件夹中。
我不明白为什么它没有显示在 XAML 代码编辑器下拉列表中。DataType
TFolderItem
MyProject.Classes
public class TFolderItem
{
/*public FolderItem(RemoteDirectoryInfo rdi, WinSCP.Session winscpSession)
{
RDI = rdi;
this.WinSCPSession = winscpSession;
}*/
public TFolderItem(string path, WinSCP.Session winscpSession)
{
RDI = winscpSession.ListDirectory(path);
this.FtpPath = path;
this.WinSCPSession = winscpSession;
}
private WinSCP.Session winscpSession;
public RemoteDirectoryInfo RDI { get; set; }
public string FtpPath { get; set; }
public WinSCP.Session WinSCPSession
{
get { return this.winscpSession; }
set { this.winscpSession = value; }
}
public IList Children
{
get
{
var children = new CompositeCollection();
var subDirItems = new List<TFolderItem>();
var subDirFiles = new List<RemoteFileInfo>();
foreach (RemoteFileInfo rfi in RDI.Files)
{
if (rfi.IsDirectory)
{
subDirItems.Add(new TFolderItem(this.FtpPath + rfi.Name + "/", this.WinSCPSession));
}
else
{
subDirFiles.Add(rfi);
}
}
children.Add(new CollectionContainer
{
Collection = subDirItems
});
children.Add(new CollectionContainer
{
Collection = subDirFiles
});
return Children;
}
}
}
这是视图的 xaml:
<UserControl x:Class="MyProject2.Views.FTPTab"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyProject2.Views"
xmlns:MyProject2Classes="clr-namespace:MyProject2.Classes"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TreeView ItemsSource="{Binding FolderItems}" Height="300" Width="300">
<TreeView.Resources >
<HierarchicalDataTemplate DataType="" ItemsSource="{Binding Childrenx}">
<TextBlock Text="{Binding FtpPathr}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType=":">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
这是视图模型:
public class FTPTabViewModel : BindableBase
{
public FTPTabViewModel(string host, WinSCP.Session winscpSession)
{
this.Host = host;
this.FolderItems = new ObservableCollection<TFolderItem>();
this.Session = winscpSession;
this.FolderItems.Add(new TFolderItem("/",Session));
}
private WinSCP.Session session;
private ObservableCollection<TFolderItem> folderItems;
private string host;
public string Host
{
get { return this.host; }
set { this.host = value; }
}
public WinSCP.Session Session
{
get { return session; }
set { this.session = value; }
}
public ObservableCollection<TFolderItem> FolderItems
{
get { return folderItems; }
set { SetProperty(ref this.folderItems, value); }
}
}