首页 文章

从选定的数据绑定列表框项中获取值

提问于
浏览
1

所以我真的不知道如何提出这个问题,但这正是我想要实现的目标 . 我有一个包含此代码的列表框:

<ListBox 
    x:Name="lb"
    Margin="0,0,0,100"
    Background="#212B34"
    BorderThickness="0"
    Padding="0"
    SelectionChanged="lb_SelectionChanged">

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
            <Setter Property="Padding" Value="0,8,0,8"></Setter>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Height="152" BorderThickness="10,0,0,0" BorderBrush="#2E66AA" Background="#161C22" Padding="8,8,8,8">
                <Grid.RowDefinitions>
                    <RowDefinition Height="30"></RowDefinition>
                    <RowDefinition Height="25"></RowDefinition>
                    <RowDefinition Height="25"></RowDefinition>
                    <RowDefinition Height="60"></RowDefinition>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="4*"></ColumnDefinition>
                    <ColumnDefinition Width="2*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock Foreground="#2E66AA" Text="{Binding Location}" FontSize="18" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"></TextBlock>
                <TextBlock Foreground="White" Text="{Binding Description}" FontSize="12" Grid.Row="1" Grid.RowSpan="3" Grid.Column="0" TextTrimming="WordEllipsis" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap"></TextBlock>
                <TextBlock Foreground="White" Text="{Binding Date}" FontSize="18" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" TextAlignment="Right"></TextBlock>
                <TextBlock Foreground="White" Text="{Binding Time}" FontSize="18" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch" TextAlignment="Right"></TextBlock>
                <TextBlock Foreground="#2E66AA" FontSize="24" Grid.Row="3" Grid.Column="1" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" TextAlignment="Right">
                    <Run Text="$ "/>
                    <Run Text="{Binding Price}"/>
                    <Run Text=";"/>
                </TextBlock>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

并将Azure App Service用于我的数据库 . 我使用itemsource将数据绑定到列表框:

private async void loadEvents_Click(object sender, RoutedEventArgs e)
{
    IMobileServiceTable<eventTable> eventList = App.MobileService.GetTable<eventTable>();


    MobileServiceCollection<eventTable, eventTable> events = await eventList
        .Where(ProductTable => ProductTable.id != "")
        .ToCollectionAsync();

    lb.ItemsSource = events;

}

我想要做的是当用户选择他需要重定向到新页面的列表框项目时 . 但是在这个新页面上我需要事件的id(数据库中的行) . 所以我可以使用此id来检索事件的所有进一步信息 .

也许我需要使用将id绑定到listboxitem但是我将它绑定到什么?我可以隐藏的文本块吗?如果我将它绑定到某些东西,我该如何检索它?

这是我用来将用户重定向到新页面的方法:

private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.Frame.Navigate(typeof(eventPage));
}

如果有不同的方式来获取有关所选事件的信息,请告诉我们 .

我将衷心感谢您的帮助 .

1 回答

  • 3

    lb.SelectedItem 获取 SelectedItem 并将类型转换为相应的类 . 从那里,你可以获得所选项目的IP . 现在将此值作为第二个参数传递给 Frame.Navigate .

    private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        this.Frame.Navigate(typeof(eventPage), (eventTable)lb.SelectedItem);
    }
    

    要在下一页上获得此值

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
    
        var selectedItem = (eventTable)e.Parameter;
    }
    

相关问题