微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将嵌套collectionView的ItemsSource属性绑定到其中包含的CollectionView的项目?

如何解决如何将嵌套collectionView的ItemsSource属性绑定到其中包含的CollectionView的项目?

这个问题可能会让人很困惑,所以我会尽力澄清一下,因此基本上我在另一个CollectionView中有一个CollectionView,并且我想将第二个CollectionView中包含的视图的属性绑定到dataTemplate显示的单个对象的属性。的第一个collectionView。

我可以将第二个CollectionView的ItemsSource绑定到与第一个collectionView绑定的相同ObservableCollection,这将使我能够访问提到的ObservableCollection中包含的每个对象的属性,但是我想要的是仅将第二个CollectionView绑定到显示第二个CollectionView的第一个CollectionView的DataTemplate显示的对象。 我希望我能够正确解释它。

XAML代码

<ContentPage.Resources>
        <ResourceDictionary>
            <selectors:FirstSelector x:Key="First"/>
            <selectors:SecondSelector x:Key="Second"/>
        </ResourceDictionary>
    </ContentPage.Resources>

    <renderers:GradientLayout
        ColorsList="#FFFFFF,#FFFFFF"
        Mode="ToBottomLeft"
        Padding="10,50,10,0">
        
        <ScrollView>
            <StackLayout>
                <CollectionView
                    ItemsSource="{Binding FirstList}"
                    ItemTemplate="{StaticResource First}"

                    VerticalOptions="FillAndExpand"
                    HorizontalOptions="FillAndExpand"
                    Margin="0,15">

                    <CollectionView.ItemsLayout>
                        <LinearItemsLayout
                            Orientation="Vertical"
                            ItemSpacing="15"/>
                    </CollectionView.ItemsLayout>

                    <CollectionView.Resources>

                        <DataTemplate x:Key="normal">
                            <Grid
                                HeightRequest="400"
                                HorizontalOptions="FillAndExpand"
                                ColumnDeFinitions="20*,30*,25*,25*"
                                RowDeFinitions="15*,70*,15*">

                                <Frame
                                    Padding="0"
                                    HasShadow="False"
                                    BackgroundColor="Pink"
                                    CornerRadius="30"
                                    IsClippedToBounds="True"

                                    Grid.Column="0"
                                    Grid.Row="1"
                                    Grid.ColumnSpan="4">
                                    <CollectionView
                                        ItemTemplate="{StaticResource Second}"
                                        ItemsSource="{Binding Source={x:Reference home},Path=BindingContext.FirstList}"

                                        BackgroundColor="Blue"
                                        VerticalOptions="FillAndExpand"
                                        HorizontalOptions="FillAndExpand">

                                        <CollectionView.ItemsLayout>
                                            <LinearItemsLayout
                                                Orientation="Horizontal"
                                                ItemSpacing="0">
                                            </LinearItemsLayout>
                                        </CollectionView.ItemsLayout>

                                        <CollectionView.Resources>
                                            <DataTemplate x:Key="normalTwo">
                                                <Grid
                                                    WidthRequest="392"
                                                    BackgroundColor="Orange"
                                                    ColumnDeFinitions="100*"
                                                    RowDeFinitions="100*"

                                                    VerticalOptions="FillAndExpand"
                                                    HorizontalOptions="FillAndExpand"
                                                    Padding="0">

                                                    <Frame
                                                        BackgroundColor="Purple"
                                                        HasShadow="False"
                                                        CornerRadius="20"

                                                        Padding="0"
                                                        Grid.Column="0"
                                                        Grid.Row="0">
                                                        <Image
                                                            Margin="-2,0"
                                                            Source="source.jpg"
                                                            Aspect="AspectFill"
                                                            HeightRequest="200">
                                                        </Image>
                                                    </Frame>
                                                </Grid>
                                            </DataTemplate>
                                        </CollectionView.Resources>
                                    </CollectionView>
                                </Frame>
                            </Grid>
                        </DataTemplate>
                    </CollectionView.Resources>
                </CollectionView>
            </StackLayout>
        </ScrollView>
    </renderers:GradientLayout>

前面的代码显示一个垂直的collectionView,其中FirstList作为ItemsSource,并且其中包含collectionView。第二个CollectionView具有FirstList作为ItemsSource,因此它显示水平列表与第一个CollectionView一样长,这就是问题所在,我只希望它访问其中包含的DataTemplate的对象。

仅此,如果您需要更多信息,我将在收到您的请求后立即提供,非常感谢您的宝贵时间,祝您生活愉快。

解决方法

它显示与第一个CollectionView相同的水平列表,并且 这是问题,我只希望它访问该对象 包含其中的DataTemplate。

要解决此问题,我认为您的第二个CollectionView的itemSource不应绑定到ObservableCollection FirstList

如果它们绑定到相同的项,那么肯定有相同的长度。

我想绑定第二个视图中包含的视图的属性 通过CollectionView可以显示由 第一个collectionView的dataTemplate。

然后,可能在BindContext中应该有另一个包含individual object displayed by the dataTemplate of the first collectionView的ObservableCollection。第二个collectionView应该绑定到此ObservableCollection。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。