Я использую "gridview" не только для "отображения", но и для того, чтобы пользователи могли взаимодействовать, например нажмите кнопку внутри определенного элемента. Предположим, что моя сетка выглядит так:
<Gridview>
<Gridview.Itemtemplate>
<DataTemplate>
<StackPanel>
<Image> </Image>
<Button> </Button>
</StackPanel>
</DataTemplate>
</Gridview.Itemtemplate>
Если я нажму кнопку, все кнопки всех элементов в сетке будут делать то же самое. Как мы можем нажать на кнопку и узнать, к какому элементу она принадлежит?
* ПРИМЕЧАНИЕ: нажатие только кнопки не вызовет событие «ItemIsSelected», потому что элемент не был нажат, это была кнопка.
Я использовал шаблон MVVM, но только для цели «чистого кода», поэтому я предполагаю, что вы имеете в виду, используя CommandParameter, чтобы передать «какой элемент он принадлежит» «параметру», но как создать параметр, знающий, что он принадлежит какому элементу?





Допустим, ваш предмет является объектом класса LineItem. После нажатия кнопки вы можете использовать sender из аргумента события щелчка, чтобы получить DataContext, который будет тем же объектом.
(sender as FrameworkElement).DataContext
// Маленькая выборка
MainPage.Xaml
<Page
x:Class = "App1.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:App1"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
x:Name = "YourPage"
Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<GridView x:Name = "GridView">
<GridView.ItemTemplate>
<DataTemplate x:DataType = "local:LineItem">
<StackPanel>
<TextBlock Text = "{x:Bind Title}"></TextBlock>
<TextBlock Text = "{x:Bind description}"></TextBlock>
<Button Content = "Action" Click = "Button_Click"></Button>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
</Page>
MainPage.Xaml.cs
public sealed partial class MainPage : Page
{
List<LineItem> MyDictionary = new List<LineItem>();
public MainPage()
{
MyDictionary.Add(new LineItem() { Title = "Item1", description = "Desc1" });
MyDictionary.Add(new LineItem() { Title = "Item2", description = "Desc2" });
MyDictionary.Add(new LineItem() { Title = "Item3", description = "Desc3" });
this.InitializeComponent();
GridView.ItemsSource = MyDictionary;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
LineItem clicked_item =(LineItem)((sender as FrameworkElement).DataContext);
await (new MessageDialog(clicked_item.Title + " Button is clicked ")).ShowAsync();
}
}
public class LineItem
{
public string Title { get; set; }
public string description { get; set; }
}
Чаще всего вы используете шаблон MVVM и привязываете кнопку к
ICommand, затем вы настраиваете в xamlCommandParameter, который будет передавать конкретный связанный элемент команде. Слишком сложно написать ответ, изучите MVVM и при необходимости задайте более конкретные вопросы.