UWP - не может получить доступ к значениям в ItemsPanel

У меня есть следующий XAML, но я не могу получить доступ к содержимому ItemsWrapGrid в соответствующем файле.CS - может кто-нибудь сказать мне, что я должен делать (вот код позади и xaml):

private void wifiTapped(object sender, TappedRoutedEventArgs e)
        {
            Debug.WriteLine("in here " + e.GetType().ToString());
            ItemsWrapGrid wg = (ItemsWrapGrid) sender;

            Debug.WriteLine(e.OriginalSource.ToString());
            foreach (Control c in wg.Children)
            {
                Debug.WriteLine("Control " + c.Name);

            }

            Debug.WriteLine("leaving ");
        }





<GridView VerticalAlignment="Top" ItemsSource="{Binding nets}" x:Name="GDView" ItemClick="gdViewClick" >
            <GridView.ItemTemplate>
                <DataTemplate x:Name="configDataTemplate" x:DataType="data:wifiNets" >
                    <StackPanel Height="300" Width="350" Margin="10" Name="dtStackPanel" >
                        <Image Source="Assets\wifiIcon.png" Width="200" Height="201"  />
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Name" Margin="0,0,10,0"/>
                            <TextBlock Name="configSSID" Width="auto"  Text="{x:Bind NetSSID}" FontSize="24" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Strength"  Margin="0,0,10,0"/>
                            <!--<TextBlock Name="configStrength" Width="auto" Text="{x:Bind NetSSIDStrength}" FontSize="20" />-->
                            <ProgressBar Name="configProgBar" Maximum="5" Value="{x:Bind NetSSIDStrength}" Foreground="Green"  />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Connected" Margin="0,0,10,0"/>
                            <TextBlock Name="configConnectedTo" Text="{x:Bind NetSSIDConnected}" FontSize="20"/>
                        </StackPanel>

                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>

            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid MaximumRowsOrColumns="10" Orientation="Vertical"  Tapped="wifiTapped" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
        </GridView> 

Просто чтобы прояснить, когда я запускаю это, у меня есть три элемента данных (поэтому он работает), но я хотел бы иметь возможность щелкнуть по любому из трех элементов данных и определить отдельные элементы управления. и их значения в панели данных.

Заранее спасибо, это сводит меня с ума. Павел.

1 ответ

Решение

Задавать IsItemClickEnabled true в вашем GridView, и подключитесь к событию ItemClick на самом GridView. Из аргументов события вы можете получить отправителя (скорее всего, GridViewItem Сам элемент интерфейса, из которого ваш DataTemplate содержание ребенка), а ClickedItem, который является связанным datacontext таблицы данных - в вашем случае экземпляр data:wifiNets - что если ваши привязки работают, значит, вам вообще не придется искать в VisualTree.

Если по какой-либо причине вы хотите выполнить возврат через VisualChildren для элементов любого ItemsControl, используйте ContainerFromIndex или же ContainerFromItem методы ItemsControl, чтобы получить ItemContainer, в котором размещается каждый экземпляр таблицы данных - хотя я бы не советовал делать это, если вам это действительно не нужно. В идеале у вас не должно быть необходимости вручную перелистывать визуальное дерево.

Другие вопросы по тегам