是否可以从子网格视图访问父列表视图项目?

Posted

技术标签:

【中文标题】是否可以从子网格视图访问父列表视图项目?【英文标题】:Is it possible to access parent listview item from child gridview? 【发布时间】:2020-08-23 16:45:24 【问题描述】:

好的,所以我有一个带有嵌套 AdaptiveGridView 的 ListView:

<ListView Name="lvBackpacks"
                      ItemsSource="x:Bind ViewModel.Backpacks"
                      HorizontalAlignment="Stretch"
                      Background="Black"
                      Opacity="0.9" Margin="10"
                      SelectionMode="None"
                      DataContext="x:Bind ViewModel">

                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="datalinks:BackpackWithItems">
                        <StackPanel Orientation="Vertical">



                            <controls:AdaptiveGridView ItemsSource="x:Bind Items"
                                                       OneRowModeEnabled="False"
                                                       SelectionMode="None"
                                                       DesiredWidth="200">
                                <GridView.ItemTemplate>
                                    <DataTemplate x:DataType="model:Item">
                                        <Grid>
                                            <StackPanel Orientation="Vertical"
                                                        Height="100"
                                                        HorizontalAlignment="Stretch"
                                                        Padding="5,1,5,1" 
                                                        Background="LightGray" Opacity=".80">

                                                <Grid>
                                                    <TextBlock Text="x:Bind Title, Mode=OneWay"
                                                               FontSize="20"
                                                               Foreground="Black"
                                                               Visibility="Binding ElementName=lvBackpacks, Path=DataContext.IsVisible, Converter=StaticResource FalseToVisibleConverter"/>
                                                    <TextBox Text="x:Bind Title, Mode=TwoWay"
                                                             Visibility="Binding ElementName=lvBackpacks, Path=DataContext.IsVisible, Converter=StaticResource TrueToVisibleConverter"/>
                                                </Grid>

                                                <Grid>
                                                    <TextBlock FontSize="15"
                                                               Text="x:Bind Description, Mode=OneWay"
                                                               Style="ThemeResource CaptionTextBlockStyle" 
                                                               Foreground="ThemeResource SystemBaseMediumHighColor"
                                                               Visibility="Binding ElementName=lvBackpacks, Path=DataContext.IsVisible, Converter=StaticResource FalseToVisibleConverter"/>
                                                    <TextBox Text="x:Bind Description, Mode=TwoWay"
                                                             Visibility="Binding ElementName=lvBackpacks, Path=DataContext.IsVisible, Converter=StaticResource TrueToVisibleConverter"/>
                                                </Grid>
                                                <Button CommandParameter="x:Bind I WANT TO ACCESS THE PARENT LISTVIEW ITEM HERE"/>
                                            </StackPanel>

                                        </Grid>
                                    </DataTemplate>
                                </GridView.ItemTemplate>

                            </controls:AdaptiveGridView>

                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

是否可以从gridview 中的item 中获取listview 中的当前item?我需要将 LV 项目作为 CommandParameter 传递。

我只对包含 MVVM 模式(无代码隐藏)的解决方案感兴趣。

如果这是不可能的,我怎样才能用另一种方法来实现这个功能?

【问题讨论】:

我不知道AdaptiveGridView是什么,但它的DataContext是你需要的。 谢谢!我使用 DataContext 发布和回答。 【参考方案1】:

将 DataContext 设置为父列表视图项(只写 x:Bind 确实指的是当前项)。

<controls:AdaptiveGridView  Name="gvItems"
                            ItemsSource="x:Bind Items"
                            OneRowModeEnabled="False"
                            SelectionMode="None"
                            DesiredWidth="200"
                            DataContext="x:Bind">

父项的用法:

CommandParameter="Binding ElementName=gvItems, Path=DataContext"

【讨论】:

以上是关于是否可以从子网格视图访问父列表视图项目?的主要内容,如果未能解决你的问题,请参考以下文章

将数据网格视图背景设置为透明

Flutter:从网格视图横向滚动的列表视图过渡

在颤动的网格视图中将最后一行项目居中

如何从 Flutter 中的网格视图计数访问生成列表中的特定单元格?

如何委托telerik网格视图常用方法从每个子页面的父页面调用?

从网格视图创建不同值的列表