好的,让我重新说出问题要更清楚,并确切地问我想要完成什么。
我有一个网络服务,从我的数据库中选择前10篇文章(我选择ID,标题,正文,作者,日期)并将它们存储在对象列表中(每个对象有5个项目)。然后我调用该Web服务并使用返回的对象列表构建我的GridView
。所以在任何时候,我都可以在我的页面上有1-10个GridViewItems(在我的例子中是Tiles)(取决于我列表中的对象数量)。
根据我对ASP.net的经验,比方说我正在填写查询的下拉列表。假设我的查询返回2列(ID,Name)。我会将DataTextField
设置为名称,将DataTextValue
设置为 ID 。
我在这里寻找相同的功能。当我单击每个GridViewItem
(平铺)中生成的按钮时,我希望能够从该特定文章中提取ID。我知道在绑定GridView
时我需要存储该ID,因此当我点击阅读更多按钮时我可以使用它。
我的最终产品是当用户点击10篇文章之一的阅读更多按钮时,它会将它们带到该文章的详细页面,向其显示整个文章正文等。我将通过文章 ID 从我的数据库中提取此信息。这就是为什么我将文章ID 正确地绑定到每个GridViewItem
是非常重要的,所以我可以提取值并稍后使用它。
我将在我的代码下面发布我如何构建Gridview等等。
<Page.Resources>
<DataTemplate x:Key="TileTemplate">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock x:Name="TitleBlock" Text="{Binding TitleView}" FontFamily="Segoe UI" FontWeight="SemiBold" FontSize="22" Foreground="White" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10"></TextBlock>
<TextBlock x:Name="BodyBlock" Text="{Binding BodyView}" FontFamily="Segoe UI" FontWeight="Light" FontSize="16" Foreground="White" TextWrapping="Wrap" Height="110" Width="280" Margin="10,0"></TextBlock>
<Button x:Name="ReadMoreButton" Content="Read more" Click="btnOpenArticle_Click" HorizontalAlignment="Right"></Button>
</StackPanel>
</DataTemplate>
</Page.Resources>
<Grid x:Name="tileGrid" Background="LightGray">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<controls:PageHeader BackButtonVisibility="Collapsed" Content="News" Frame="{x:Bind Frame}">
<Interactivity:Interaction.Behaviors>
<Behaviors:EllipsisBehavior Visibility="Auto" />
</Interactivity:Interaction.Behaviors>
<controls:PageHeader.SecondaryCommands>
<AppBarButton Click="{x:Bind ViewModel.GotoPrivacy}" Label="Privacy" />
<AppBarButton Click="{x:Bind ViewModel.GotoAbout}" Label="About" />
</controls:PageHeader.SecondaryCommands>
</controls:PageHeader>
<GridView x:Name="tileGridView" Margin="12,60" ItemTemplate="{StaticResource TileTemplate}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Background="#2A2A2A"
Margin="5"
Height="200"
Width="300">
<ContentPresenter />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</GridView.ItemContainerStyle>
</GridView>
</Grid>
代码背后:
public async void ViewData()
{
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
List<GetTileDetails> TileList = new List<GetTileDetails>();
var res = await client.ViewDetailsAsync();
for (int i = 0; i < res.Count; i++)
{
TileList.Add(new GetTileDetails(res[i].TitleView, res[i].BodyView.Substring(0,170) + " ...", res[i].IDView));
}
tileGridView.ItemsSource = TileList;
}
public class GetTileDetails
{
public string TitleView { get; set; }
public string BodyView { get; set; }
public int IDView { get; set; }
public GetTileDetails() { }
public GetTileDetails(string myTitleView, string myBodyView, int myIDView)
{
this.TitleView = myTitleView;
this.BodyView = myBodyView;
this.IDView = myIDView
}
}
答案 0 :(得分:1)
您可以使用所有FrameworkElements中存在的Tag属性作为精彩的数据存储。
<Button ... Tag="{Binding ID}" Click="Btn_Click"></Button>
在Click事件处理程序中,您可以轻松访问发件人并访问其Tag属性。
答案 1 :(得分:0)
而不是使用Click
,而是将按钮的Command
绑定到您的视图模型(通过ICommand
)。然后,您可以存储TileView
属性的值。