Привязка данных Элемент управления Pivot при привязке данных в каждом шаблоне данных элементов Pivot - PullRequest
0 голосов
/ 11 октября 2018

Итак, у меня есть `` ObservableCollection, которую я привязываю к Pivot элементу управления.У этого ObservableCollection есть ребенок, который также является ObservableCollection, и я пытаюсь связать GridView в теле каждого Pivotitem.

Я проверил свой код, чтобы убедиться,коллекции заполнены, т. е.

// Level 1 ObservableCollection
foreach (var dchallenge in ChallengesList)
{
    // Level 2 ObservableCollection
    Debug.WriteLine(dchallenge.Name);
    foreach (var dactivity in dchallenge.Activities)
    {
        Debug.WriteLine(dactivity.Name);
    }
}

И его выходные данные соответствуют ожиданиям.

Для справки моя модель выглядит следующим образом:

public class Challenge
{
    public string Type { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string Slug { get; set; }
    public string Image { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public ObservableCollection<Activity> Activities { get; set; }

    public class Activity
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public long Hash { get; set; }
    }
}

И, наконец, мое мнение:

<Pivot x:Name="Items" ItemsSource="{x:Bind ChallengesList, Mode=OneWay}" Margin="20,417,0,0">
    <Pivot.HeaderTemplate>
        <DataTemplate x:DataType="data:Challenge">
            <TextBlock Text="{Binding Name, Mode=OneWay}" FontWeight="Normal" FontSize="16"/>
        </DataTemplate>
    </Pivot.HeaderTemplate>
    <Pivot.ItemTemplate>
        <DataTemplate x:DataType="data:Challenge">

            <StackPanel Margin="0,20,0,0" HorizontalAlignment="Left">
                <TextBlock Text="{Binding Description, Mode=OneWay}" MaxWidth="300" TextWrapping="WrapWholeWords"/>
                <TextBlock Text="Activities" FontWeight="Medium" MaxWidth="300" Margin="0,20,0,0"/>

                <!--<GridView DataContext="{Binding}" ItemsSource="{x:Bind Activities}" SelectionMode="None"
                          IsItemClickEnabled="False" IsSwipeEnabled="False" CanDragItems="False"
                          HorizontalAlignment="Left" Margin="0,70,0,0" VerticalAlignment="Top" Width="300">
                    <GridView.ItemTemplate>
                        <DataTemplate x:DataType="data:Challenge">
                            <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
                                <TextBlock FontSize="16" Text="{x:Bind Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>-->

            </StackPanel>

        </DataTemplate>
    </Pivot.ItemTemplate>
</Pivot>

A GridView, возможно, не тот элемент управления, на котором я окончательно остановился, но если я знаю, как его связать, тогда я смогу использовать эти знания с другим элементом управления.

Intellisense очень помогает определить, какие свойства доступны, но Activities не одно.Я получаю только строки, такие как Name и Description, которые работают правильно (первые две TextBlock).

1 Ответ

0 голосов
/ 11 октября 2018

Единственная проблема, которую я вижу, это то, что вы используете неправильный DataType во внутреннем GridView.Тип в коллекции Activities - Challenge.Activity, который является вложенным классом, а вложенные классы обозначаются знаком плюс (+) в XAML, поэтому data:Challenge+Activity:

<GridView DataContext="{Binding}" ItemsSource="{x:Bind Activities}" SelectionMode="None"
    IsItemClickEnabled="False" IsSwipeEnabled="False" CanDragItems="False"
    HorizontalAlignment="Left" Margin="0,70,0,0" VerticalAlignment="Top" Width="300">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="data:Challenge+Activity">
            <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
                <TextBlock FontSize="16" Text="{x:Bind Name}" />
            </StackPanel>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

VS все еще можетвыдавайте некоторые предупреждения, но они исчезнут после успешной компиляции.

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