Я пытаюсь настроить древовидное представление для моей ситуации на основе этого примера, но отличие состоит в том, что мои классы не вложены в класс UserControl, а в отдельное пространство имен - .DataModel. Я не могу заставить его работать, либо я получаю ошибку сборки, утверждая, что:
- "Имя" TypeInfo "не существует в пространстве имен
"CLR-имен: SegmentDataUpdater.DataModel". SegmentDataUpdater SegmentDataUpdaterDialog.xaml "
Или я получаю список с описанием типа TypeInfo в диалоговом окне. Что я делаю не так?
Мой текущий код (он дает ошибку сборки):
XAML:
<Window x:Class="SegmentDataUpdater.GUI.SegmentDataUpdaterDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SegmentDataUpdater.GUI"
xmlns:data="clr-namespace:SegmentDataUpdater.DataModel"
mc:Ignorable="d"
Title="Segment Data Update" Height="450" Width="400">
<Grid>
<TreeView Name="trvTypeInfos">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type data:TypeInfo}" ItemsSource="{Binding SegmentInfos}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text=" [" Foreground="Blue" />
<TextBlock Text="{Binding SegmentInfos.Count}" Foreground="Blue" />
<TextBlock Text="]" Foreground="Blue" />
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type data:SegmentInfo}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text=" (" Foreground="Green" />
<TextBlock Text="{Binding HasData}" Foreground="Green" />
<TextBlock Text=" years)" Foreground="Green" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
код позади:
namespace SegmentDataUpdater.GUI
{
public partial class SegmentDataUpdaterDialog : Window
{
public List<TypeInfo> TypeInfoList { get; set; }
public SegmentDataUpdaterDialog()
{
InitializeComponent();
DataContext = this;
TypeInfoList = new List<TypeInfo>();
TypeInfo type1 = new TypeInfo() { Name = "Typ pierwszy"};
type1.SegmentInfos.Add(new SegmentInfo() { Name = "Segment 1", HasData = true });
type1.SegmentInfos.Add(new SegmentInfo() { Name = "Segment 2", HasData = false });
TypeInfoList.Add(type1);
TypeInfo type2 = new TypeInfo() { Name = "Typ drugi" };
type2.SegmentInfos.Add(new SegmentInfo() { Name = "Segment 1", HasData = true });
TypeInfoList.Add(type2);
trvTypeInfos.ItemsSource = TypeInfoList;
}
}
}
Класс TypeInfo:
namespace SegmentDataUpdater.DataModel
{
public class TypeInfo
{
public string Name { get; set; }
public ObservableCollection<SegmentInfo> SegmentInfos { get; set; }
public TypeInfo()
{
SegmentInfos = new ObservableCollection<SegmentInfo>();
}
}
}
Добавлено в редакцию:
Класс SegmentInfo:
namespace SegmentDataUpdater.DataModel
{
public class SegmentInfo
{
public string Name { get; set; }
public bool HasData { get; set; }
public string JsonContents { get; set; }
}
}