【问题标题】:data binding in pivot element from 2 different sources using x:Bind使用 x:Bind 绑定来自 2 个不同来源的数据透视元素
【发布时间】:2016-09-23 10:30:31
【问题描述】:

我需要使用 x:Bind 将我的数据透视表头模板绑定到 Course_Tab 数据,并将项目模板内的 gridview 绑定到 Course_Products 数据。我已经成功完成了数据透视表头模板的绑定,但是由于一些数据模板错误,获取 gridview 的项目源对我来说有点困难。 这是代码sn-p:

public ObservableCollection<CourseList> Course_Tab { get; set; }
public ObservableCollection<Productdetails> Course_Products { get; set; }


 [DataContract]
public class CourseList
{
    [DataMember]
    public int CourseID { get; set; }
    [DataMember]
    public string CourseCategoryCode { get; set; }
    [DataMember]
    public string BoardCode { get; set; }
    [DataMember]
    public string CourseCode { get; set; }
    [DataMember]
    public string CourseName { get; set; }
    [DataMember]
    public string CourseDisplayName { get; set; }
    [DataMember]
    public string CourseShortName { get; set; }
}

[DataContract]
public class Productdetails
{
    [DataMember]
    public int ProductId { get; set; }
    [DataMember]
    public string ProductCode { get; set; }
    [DataMember]
    public string ProductName { get; set; }
    [DataMember]
    public string ProductDescription { get; set; }
    [DataMember]
    public string AcademicYearCode { get; set; }
    [DataMember]
    public string SubjectName { get; set; }
    [DataMember]
    public string Product_Type { get; set; }
    [DataMember]
    public string Product_Subtype { get; set; }
    [DataMember]
    public string SDcardsize { get; set; }
    [DataMember]
    public string Duration { get; set; }
    [DataMember]
    public string Graphics { get; set; }
}


<Pivot x:Name="Pivot1" ItemsSource="{x:Bind Course_Tab}" SelectionChanged="Pivot1_SelectionChanged">
                <Pivot.HeaderTemplate>
                    <DataTemplate x:DataType="data:CourseList">
                        <TextBlock Text="{x:Bind CourseDisplayName}"/>
                    </DataTemplate>
                </Pivot.HeaderTemplate>

                <Pivot.ItemTemplate>
                    <DataTemplate>
                        <GridView ItemsSource="{x:Bind Course_Products}">
                            <GridView.ItemTemplate>
                                <DataTemplate x:DataType="data:Productdetails">
                                    <Image Source="{x:Bind Graphics}"/>
                                </DataTemplate>
                            </GridView.ItemTemplate>
                        </GridView>
                    </DataTemplate>
                </Pivot.ItemTemplate>

            </Pivot>

【问题讨论】:

    标签: c# data-binding uwp uwp-xaml


    【解决方案1】:

    您真正想要做的是将嵌套的 GridView 绑定到 Pivot 中。在您的代码中,您将 ItemsSource 绑定到 Pivot 控件,然后您希望将集合绑定到 Pivot 项内的 GridView。所以对于 GridView 的集合,它是一个嵌套集合。

    要绑定它,我们需要更改CourseList 的数据模型,将Course_Products 添加为CourseList 的属性之一,如下所示:

    public class CourseList
    {
       [DataMember]
       public int CourseID { get; set; }
       [DataMember]
       public string CourseCategoryCode { get; set; }
       [DataMember]
       public string BoardCode { get; set; }
       [DataMember]
       public string CourseCode { get; set; }
       [DataMember]
       public string CourseName { get; set; }
       [DataMember]
       public string CourseDisplayName { get; set; }
       [DataMember]
       public string CourseShortName { get; set; }
    
       public ObservableCollection<Productdetails> Course_Products { get; set; }
    

    }

    XAML 代码:

    <Pivot x:Name="Pivot1" ItemsSource="{x:Bind Course_Tab}" SelectionChanged="Pivot1_SelectionChanged">
        <Pivot.HeaderTemplate>
            <DataTemplate x:DataType="local:CourseList">
                <TextBlock Text="{x:Bind CourseDisplayName}"/>
            </DataTemplate>
        </Pivot.HeaderTemplate>
        <Pivot.ItemTemplate>
            <DataTemplate x:DataType="local:CourseList">
                <GridView ItemsSource="{x:Bind Course_Products}">
                    <GridView.ItemTemplate>
                        <DataTemplate x:DataType="local:Productdetails">
                            <Image Source="{x:Bind Graphics}"/>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>
            </DataTemplate>
        </Pivot.ItemTemplate>
    </Pivot>
    

    数据源示例:

     Course_Tab = new ObservableCollection<CourseList>
     {
         new CourseList {CourseDisplayName="displayname1" ,Course_Products= new ObservableCollection<Productdetails>
         {
             new Productdetails {Graphics="Assets/caffe1.jpg" },
             new Productdetails {Graphics="Assets/caffe2.jpg" }
         }},
         new CourseList {CourseDisplayName="displayname2" ,Course_Products= new ObservableCollection<Productdetails>
         {
              new Productdetails {Graphics="Assets/caffe1.jpg" }
         }}
     };
    

    【讨论】:

    • 不修改CourseList的数据模型是不是不能绑定。我要做的是绑定两个非常不同的数据源,而不需要对标题和项模板进行任何嵌套。
    • 在这种情况下,您可以将CourseListProductdetails 放在一个父源中(让它们都成为父源的子集合)。无论如何,PivotItemsSource 只能是一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多