У меня есть TreeView с HierarchicalDataTemplate, который я пытаюсь связать с ObservableCollection пользовательских типов.
Но раскрывающийся список атрибутов HierarchicalDataTemplate DataType
недоступен в моем пространстве имен, он не имеет специального типа TFolderItem
, но перечисляет все другие настраиваемые типы в том же пространстве имен. Пространство имен: MyProject.Classes
, а классы находятся в папке простых классов в каталоге проекта.
Я не понимаю, почему он не отображается в раскрывающемся списке редактора кода XAML.Выпадающий список Datatype в дизайне XAML, не отображающий пользовательский класс
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>
Это ViewModel:
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); }
}
}
Как мы должны исправить ваш код, если вы не показываете свой XAML, а также модель поведения/вида кода? –
Прежде всего, ваши привязки неверны. У вас есть 'FtpPathr' вместо' FtpPath' и 'Kidsx' вместо' Children'. То, что класс TFolderItem отсутствует, может быть просто связано с тем, что вы не скомпилировали свой код с тех пор, как вы добавили этот класс. –
Привязки неверны, потому что я пытался получить отладочную команду Bindings в выходной консоли.
Я пробовал очистить и перестроить решение, но это не помогло. – steakoverflow