繁体   English   中英

数据绑定数据透视控件,而每个数据透视项目数据模板中的数据绑定

[英]Data binding Pivot control while data binding within each Pivot items data template

所以我有一个``ObservableCollection,我绑定到Pivot控件。 这个ObservableCollection有一个孩子,它也是一个ObservableCollection ,我正在尝试在每个Pivotitem的主体中绑定GridView

我已经测试了我的后台代码,以确保填充了集合,即

// 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>

一个GridView可能不是我最终希望使用的控件,但是如果我知道如何绑定它,那么我应该能够将该知识与另一个控件一起使用。

Intellisense在确定哪些属性可用方面有很大帮助,但是“ Activities不是一个。 我只得到可以正常工作的字符串,例如NameDescription (前两个TextBlock )。

我看到的唯一问题是您在内部GridView中使用了错误的DataType 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可能仍然会发出一些警告,但在成功编译后这些警告将消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM