Я пытаюсь привязать коллекцию к древовидной структуре. Моя попытка до сих пор не удалась. Я пропустил что-то, несмотря на статьи, которые я прочитал по этому поводу.Связывание коллекции с Treeview в WPF
До сих пор я пробовал что-то вроде, но Treeview просто зарисовывает идентификатор класса A и, тем самым, без кнопки для расширения.
<Grid>
<TreeView HorizontalAlignment="Left" Height="270" VerticalAlignment="Top" Width="292" ItemsSource="{Binding ManagerObjects}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:ManagerObject}" ItemsSource="{Binding MyManager}">
<TextBlock Text="{Binding Id}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Manager}" ItemsSource="{Binding ManagerClientServerProperty}">
<TextBlock Text="{Binding ManagerClientServerProperty}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local1:ManagerClientServer}">
<TextBlock Text="TEST"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local1:NetworkObject}" ItemsSource="{Binding Entities}">
<TextBlock Text="TEST"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local1:RemoteEntity}" ItemsSource="{Binding Fields}">
<TextBlock Text="TEST"/>
<!-- how classD should look like -->
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
EDIT: ДОБАВЛЕНИЕ РЕАЛЬНОГО КОД
Это в моей модели:
public class ManagerObject
{
// PROPERTIES
public int Id { get; private set; }
public Manager MyManager { get; private set; }
}
public class Manager
{
// FIELDS
private readonly ManagerClientServer managerClientServer;
// PROPERTIES
public ManagerClientServer ManagerClientServerProperty { get { return managerClientServer;} }
/**** OTHER STUFF NON IMPORTANT ****/
}
public class ManagerClientServer
{
// FIELDS
private readonly ObservableCollection<NetworkObject> Clients = new ObservableCollection<NetworkObject>();
private readonly ObservableCollection<NetworkObject> Servers = new ObservableCollection<NetworkObject>();
// PROPERTIES
public ObservableCollection<NetworkObject> ClientsProperty
{
get { return Clients; }
}
public ObservableCollection<NetworkObject> ServersProperty
{
get { return Servers; }
}
/*** OTHER STUFF NON IMPORTANT HERE ***/
}
public class NetworkObject
{
// FIELDS
private readonly ObservableCollection<RemoteEntity> _entities=new ObservableCollection<RemoteEntity>();
public uint NetworkId { get; private set; }
// PROPERTIES
public ObservableCollection<RemoteEntity> Entities
{
get { return _entities; }
}
// CONSTRUCTOR
public NetworkObject(uint id)
{
NetworkId = id;
}
}
public class RemoteEntity
{
// FIELDS
private readonly ObservableCollection<int> _fields=new ObservableCollection<int>();
// PROPERTIES
public bool IsLost { get; set; }
public bool NeedUpdate { get; set; }
public uint SessionId { get; private set; }
public ObservableCollection<int> Fields
{
get { return _fields; }
}
// CONSTRUCTOR
public RemoteEntity(uint id)
{
SessionId = id;
}
}
ViewModel просто разоблачить это свойство:
public ObservableCollection<ManagerObject> ManagerObjects
{
get { return managerObjects; }
set
{
managerObjects = value;
NotifyOfPropertyChange(()=>ManagerObjects);
}
}
private ObservableCollection<ManagerObject> managerObjects;
Инициализация только 2 ManagerObject, после этого все они включают случайное число r NetworkObjects как в коллекции клиентов, так и в серверах, и каждый из них имеет случайное число Entities.
Все коллекции здесь являются наблюдаемыми, однако они имеют другой тип в реальном, но они выставляют метод, который может сделать их наблюдаемыми, поэтому рассмотрим его таким образом.
Большое спасибо.
Не должен ли ваш ItemsSource быть набором классов? Это будет класс parent-child, а по классу - ваш фактический класс сущности. Я предполагаю, что ваша коллекцияClassA имеет только элемент 1 с классом в нем. Можете ли вы показать больше кода, например, вашей модели и viewmodel –
collectionclassA является ObservableCollection с двумя элементами в нем. Свойство моего ViewModel. –
user3091460
Вы хотите создать ObservableCollection, который включает ClassA, ClassD, ClassE с дочерним свойством, которое также является наблюдаемым , которое содержит их соответствующий дочерний элемент. –