【问题标题】:How to bind the ItemsSource property of a nested collectionView to the item of the CollectionView in which is contained?如何将嵌套collectionView的ItemsSource属性绑定到其中包含的CollectionView的item?
【发布时间】:2021-01-25 08:20:44
【问题描述】:

这个问题可能很令人困惑,所以我会尝试澄清它,所以基本上我在另一个 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,0,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,0,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的对象。

就是这样,如果您需要更多信息,我会在看到您的请求后立即提供,非常感谢大家的宝贵时间,祝您有美好的一天。

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms uicollectionview


    【解决方案1】:

    它显示一个与第一个 CollectionView 一样长的水平列表,并且 这就是问题所在,我只想让它访问 包含的DataTemplate。

    为了解决这个问题,我认为你的第二个 CollectionView 的 itemSource 不应该绑定到ObservableCollection FirstList

    如果它们绑定到相同的itemsSoure,它们肯定具有相同的长度。

    我想绑定第二个中包含的视图的属性 CollectionView 显示的单个对象的属性 第一个collectionView的dataTemplate。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多