Как правильно связать класс с наследованием - PullRequest
0 голосов
/ 19 октября 2019

У меня есть дерево. В древовидной структуре у меня есть Студент - Домашняя работа. Домашняя работа - это класс с Hineritance, поэтому в разделе Домашняя работа у меня есть -> ScienceH, PhysicsH, MathH. Как я могу создать XAML, который привязан к списку домашних заданий, но изменяется в зависимости от специфики «ребенка»?

Я заблокирован, так как не понимаю, как выполнить привязку

class Student
    {
        public string Name;
        List<Homework> homeworks;
    }

class Homework
    {
        public DateTime Date;
        public int Vote;
    }
class ScienceH : Homework
    {
        public string Topic;
    }
class PhysicsH : Homework
    {
        public int Points;
    }

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

1 Ответ

1 голос
/ 19 октября 2019

Вы можете определить TreeView в UWP XAML следующим образом: здесь :

<TreeView ItemsSource="{x:Bind ListOfStudents}">
    <TreeView.ItemTemplate>
        <DataTemplate x:DataType="model:Student">
            <TreeViewItem ItemsSource="{x:Bind homeworks}"
                          Content="{x:Bind Name}"/>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Затем вам нужно будет определить DataTemplate для каждого класса, который выожидать отображения. Добавьте это в TreeView XAML:

<TreeView.Resources>
    <DataTemplate x:DataType="model:ScienceH">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Date}" />
            <TextBlock Text="{Binding Vote}" />
        </StackPanel>
    </DataTemplate>

    <DataTemplate x:DataType="model:PhysicsH ">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Date}" />
            <TextBlock Text="{Binding Vote}" />
            <TextBlock Text="{Binding Points}" />
        </StackPanel>
    </DataTemplate>
</TreeView.Resources>

Вы также можете прочитать больше о DataTemplate class здесь .

Обратите внимание, что, как предлагается вкомментарии, вам нужно реализовать уведомления об изменениях в ваших классах, чтобы обеспечить правильную привязку. Это все подробно здесь .

В качестве альтернативы, у вас, похоже, есть TreeView с древовидной структурой известной фиксированной глубины: глубина 0 будет списком Student и глубиной1 будет список Homework, так что вы также можете обойтись без TreeView и просто вложить два ItemsControl друг в друга.

...