XAML CollectionView网格中的CollectionView未呈现

xuo3flqw  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个ContentPage,它包含一个CollectionView在另一个CollectionView中。我的每个“Standings”对象都包含一个“StandingDetail”集合,我希望在排名网格的最右边一列中显示该集合。

...
<CollectionView ItemsSource="{Binding Standings}"
                SelectionMode="None">
                         
    <CollectionView.ItemsLayout>
         <GridItemsLayout Orientation="Vertical"
                          Span="1"/>
    </CollectionView.ItemsLayout>
                            
    <CollectionView.ItemTemplate>
         <DataTemplate x:DataType="model:ContestStandingView">
              <Grid Padding="10"
                    ColumnDefinitions="25,*,*,*">
                   <Label Text="{Binding place}"
                          Grid.Column="0"/>
                   <Label Text="{Binding userName}"
                          Grid.Column="1"/>
                   <Label Text="{Binding creditsTotal}"
                          Grid.Column="2"/>

 
                   <CollectionView ItemsSource="{Binding StandingDetail}"
                                   SelectionMode="None"
                                   HeightRequest="100"
                                   Grid.Column="3"
                                   BackgroundColor="Red">
                                            
                         <CollectionView.ItemsLayout>
                              <GridItemsLayout Orientation="Vertical"
                                               Span="1"/>
                         </CollectionView.ItemsLayout>
                                            
                         <CollectionView.ItemTemplate>
                              <DataTemplate x:DataType="model:StandingDetail">
                                   <Grid Padding="10"
                                         ColumnDefinitions="*,*"
                                         BackgroundColor="Blue"
                                         HeightRequest="50">
                                        <Label Text="TestStatic"
                                               Grid.Column="0"/>
                                        <Label Text="{Binding detailName}"
                                               Grid.Column="1"/>

                                   </Grid>
                              </DataTemplate>
                         </CollectionView.ItemTemplate>
                    </CollectionView>

               </Grid>
          </DataTemplate>
      </CollectionView.ItemTemplate>
</CollectionView>
...

我添加了背景颜色来帮助我调试。我希望网格的右列是一个蓝色矩形,包含在一个红色矩形中,蓝色矩形中的文本,但输出如下所示。为什么蓝色栅格未渲染?

w1e3prcc

w1e3prcc1#

您应该定义模型:ContestStandingView如下所示,如果您希望CollectionView与另一个CollectionView嵌套:

public class ContestStandingView 
{
      public string place { get;set; }
      public string userName { get;set; } 
      public string creditsTotal { get; set; }
      public ObservableCollection<StandingDetail> standingDetails { get; set; } = new();

}

然后将CollectionView的ItemSource赋值到代码隐藏(下面的示例)或您的ViewModel中,如下所示:

public ObservableCollection<ContestStandingView> Standings { get; set; }
    public TestPage()
    {
        InitializeComponent();


        Standings = new()
        {
            new()
            {
                place="1",
                userName="Adam L",
                creditsTotal="17,540",

                standingDetails = new()
               {

                  new(){ detailName="detailName1"
               },
                 new(){ detailName="detailName2"}
               }
        },

                 new()
            {

                place="2",
                userName="delta",
                creditsTotal="15,000",

                standingDetails = new()
              {

               new(){
                 detailName="detailName1",
               },
                 new(){
                 detailName="detailName2"
               },

                }
                }
        };
        BindingContext = this;
}

输出:

相关问题