首页 > 解决方案 > 是否可以从子网格视图访问父列表视图项?

问题描述

好的,所以我有一个带有嵌套 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 中的项目获取列表视图中的当前项目?我需要将 LV 项目作为 CommandParameter 传递。

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

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

标签: c#xamllistviewmvvmuwp

解决方案


将 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}"

推荐阅读