2015-09-10 3 views
0

У меня есть 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); } 
    } 
} 
+0

Как мы должны исправить ваш код, если вы не показываете свой XAML, а также модель поведения/вида кода? –

+1

Прежде всего, ваши привязки неверны. У вас есть 'FtpPathr' вместо' FtpPath' и 'Kidsx' вместо' Children'. То, что класс TFolderItem отсутствует, может быть просто связано с тем, что вы не скомпилировали свой код с тех пор, как вы добавили этот класс. –

+0

Привязки неверны, потому что я пытался получить отладочную команду Bindings в выходной консоли.
Я пробовал очистить и перестроить решение, но это не помогло. – steakoverflow

ответ

0

кажется, что х: тип выпадающий отображает только классы с конструктором по умолчанию. Добавление одного из классов TFolderItem позволило отобразить его в раскрывающемся списке типов x:.