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, в котором размещается каждый экземпляр таблицы данных - хотя я бы не советовал делать это, если вам это действительно не нужно. В идеале у вас не должно быть необходимости вручную перелистывать визуальное дерево.