, поэтому у меня есть TreeView, который работает нормально. Но моя проблема в том, что я хочу отображать разные деревья разных типов без необходимости создавать их для каждого сценария в XAML. Я знаю, как установить содержимое listView из кода, это же возможно для TreeView? Мой treeView сейчас выглядит следующим образом, но, очевидно, работает только для элементов типа CAN-сообщения:
<TreeView TreeViewItem.Selected="OnItemSelected" MouseDoubleClick="Tree_MouseDoubleClick" Name="tree">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type srcM:CANMessage}" ItemsSource="{Binding Signals}">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Name}"/>
<TextBlock Text=" (0x"/>
<TextBlock Text="{Binding CANid}"/>
<TextBlock Text=")"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Дело в том, что у меня разные сценарии. Например, где я хочу отображать только список сигналов класса ADTF (показан ниже), который имеет строку типа.
А в другом случае я хочу отобразить список CANMessages класса CAN, и для каждого элемента сообщения я хочу установить список сигналов, который он содержит в качестве подэлементов (что реализовано в примере XAML). У меня есть короткая версия следующих классов:
public class ADTF : ISignalSource
{
public string Id { get; set; }
public List<string> Signals { get; set; }
}
и
public class CAN: ISignalSource
{
public string Id { get; set; }
public List<CANMessage> Signals { get; set; }
}
public class CANMessage
{
public string Id { get; set; }
public List<string> Signals { get; set; }
}
Так что мне нужно создать HierarchicalDataTemplate для каждого сценария. Но я хочу сделать это в коде позади, потому что кажется, что он требует меньше кода, чем реализация HierarchicalDataTemplate в XAML для каждого сценария. Есть ли способ это сделать?