我试图通过不在集合视图中添加集合视图来显示嵌套数据来避免不良做法,并且我有一个

   public partial class Items
   {
        public int itemNumber { get; set; }
        public string itemdescr{ get; set; }
        public List<Items> Child { get; set; }
    }
    

我的Collection 视图是这样的

<CollectionView x:Name="CollectionViewBoM" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="9" ItemsSource="{Binding Data}">
                    <CollectionView.ItemTemplate>
                        <DataTemplate >
                            <mct:Expander >
                                <mct:Expander.Header>
                                    <Grid HeightRequest="45" MaximumHeightRequest="90" ColumnSpacing="1" RowSpacing="2">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="240"/>
                                            <ColumnDefinition Width="*"/>
                                        </Grid.ColumnDefinitions>
                                        <BoxView Grid.Column="0" Style="{DynamicResource ContentBoxView}"/>
                                        <BoxView Grid.Column="1" Style="{DynamicResource ContentBoxView}"/>
                                        <Label TextColor="{DynamicResource SecondaryTextColor}" Grid.Column="0" Text="{Binding itemNumber}" Style="{DynamicResource ContentLabel}"/>
                                        <Label TextColor="{DynamicResource SecondaryTextColor}" Grid.Column="1" Text="{Binding Description}" Style="{DynamicResource ContentLabel}"/>
                                    </Grid>
                                </mct:Expander.Header>
                                <mct:Expander.Content x:Name="CollectionViewChild">
                                    <StackLayout BindableLayout.ItemsSource="{Binding Child}">
                                        <BindableLayout.ItemTemplate>
                                            <DataTemplate>
                                                <HorizontalStackLayout>
                                                    <Label Text="{Binding itemNumber}" />
                                                    <Label Text="{Binding itemdescr}"  Margin="10,0,0,0"/>
                                                </HorizontalStackLayout>
                                            </DataTemplate>
                                        </BindableLayout.ItemTemplate>
                                    </StackLayout>
                                </mct:Expander.Content>
                            </mct:Expander>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>

我绑定到视图模型,但我可以看到数据,但不能看到子数据.我是否错误地使用了BindableLayout.ItemsSource?


        [ObservableProperty]
        public List<Items> data;

推荐答案

您可以重新判断是否可以正确获取内部列表数据(Child).

根据您的代码,我制作了一个实现此功能的演示,它可以正常工作.

您可以参考以下代码:

public partial class MyViewModel:ObservableObject 
{
    [ObservableProperty]
    public List<Items> data;

    public MyViewModel()
    {
        List<Items> Childs = new List<Items>();

        Childs.Add(new Items { itemNumber = 01 - 1, itemdescr = "desc-01-1" });
        Childs.Add(new Items { itemNumber = 02 - 1, itemdescr = "desc-02-1" });
        Childs.Add(new Items { itemNumber = 03 - 1, itemdescr = "desc-03-1" });

        Data = new List<Items>();
        Data.Add(new Items { itemNumber= 01, itemdescr ="desc-01",Child= Childs });
        Data.Add(new Items { itemNumber= 02, itemdescr ="desc-02", Child = Childs });
        Data.Add(new Items { itemNumber= 03, itemdescr ="desc-03", Child = Childs });
        Data.Add(new Items { itemNumber= 04, itemdescr ="desc-04" , Child = Childs });
        Data.Add(new Items { itemNumber= 05, itemdescr ="desc-05" , Child = Childs });
        Data.Add(new Items { itemNumber= 06, itemdescr ="desc-06" , Child = Childs });
        
    }
}

用途:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiMVVMToolkitApp.MyPage"
             xmlns:viewmodel="clr-namespace:MauiMVVMToolkitApp.ViewModels"
             xmlns:mct="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             Title="MyPage">

    <ContentPage.BindingContext>
        <viewmodel:MyViewModel></viewmodel:MyViewModel>
    </ContentPage.BindingContext>
    <VerticalStackLayout>
        <CollectionView x:Name="CollectionViewBoM" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="9" ItemsSource="{Binding Data}">
            <CollectionView.ItemTemplate>
                <DataTemplate >
                    <mct:Expander >
                        <mct:Expander.Header>
                            <Grid HeightRequest="45" MaximumHeightRequest="90" ColumnSpacing="1" RowSpacing="2">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="240"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <!--<BoxView Grid.Column="0" />
                                <BoxView Grid.Column="1" />-->
                                <Label  Grid.Column="0" Text="{Binding itemNumber}" />
                                <Label  Grid.Column="1" Text="{Binding Description}" />
                            </Grid>
                        </mct:Expander.Header>
                        <mct:Expander.Content x:Name="CollectionViewChild">
                            <StackLayout BindableLayout.ItemsSource="{Binding Child}">
                                <BindableLayout.ItemTemplate>
                                    <DataTemplate>
                                        <HorizontalStackLayout>
                                            <Label Text="{Binding itemNumber}" />
                                            <Label Text="{Binding itemdescr}"  Margin="10,0,0,0"/>
                                        </HorizontalStackLayout>
                                    </DataTemplate>
                                </BindableLayout.ItemTemplate>
                            </StackLayout>
                        </mct:Expander.Content>
                    </mct:Expander>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </VerticalStackLayout>
</ContentPage>

注:

为了代码简洁,我注释掉了两个BoxView的布局.

此外,我注意到类Items还应该包含另一个属性 Description,并且类Items(Child)的属性,其内部的子元素也是类型Items.初始化数据时请注意这一点.

Csharp相关问答推荐

如何才能让不是本地主机的内部开发专家大摇大摆

为什么我的弹丸朝错误的方向移动?

ASP.NET Core将SON重新序列化为派生类

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

EF Core Fluent API中定义的多对多关系

EF Core判断是否应用了AsSplitQuery()

Elasticsearch:当我try 使用c#将嵌套对象添加到filter中时出现问题

我需要两个属性类吗

REST API端点中异步后台代码执行的类型

MAUI查询参数单一字符串项将不起作用

如何在NodaTime中为Instant添加一年?

从应用程序图API调用访问所有者字段

使用可信第三方的Iext8.Net pdf签名

Docker Container中的HttpRequest后地址不可用

使用带有参数和曲面的注入失败(&Q;)

EF核心区分大小写的主键

System.NotSupportdException:流不支持读取

从Base64转换为不同的字符串返回相同的结果

使用C#12中的主构造函数进行空判断

Xamarin.Forms项目中缺少MainPage.xaml