Связывание DataFemplate WPF TreeView с проблемой не вложенных классов - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь настроить древовидное представление для моей ситуации на основе этого примера, но отличие состоит в том, что мои классы не вложены в класс 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; }
    }
}

1 Ответ

0 голосов
/ 23 мая 2019

Это решено.Проблема была с настройками конфигурации.

Проект был установлен на x64, но конфигурации для любого процессора, после настройки конфигурации на x64 он работает.

Рабочее решение в моем втором посте о другой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...