从选定的列表视图项中获取 id

Posted

技术标签:

【中文标题】从选定的列表视图项中获取 id【英文标题】:Getting id from selected listview item 【发布时间】:2018-11-14 19:59:50 【问题描述】:

我有一个包含此数据模板的 ListView:

<ListView x:Name="lvRitten" Grid.Column="0" Background="Gold" ItemsSource="Binding ObcRitten" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="lvRitten_SelectionChanged" SelectionMode="Single">
    <ListView.ItemTemplate>
        <DataTemplate DataType="x:Type classes:Rit">
            <Button x:Name="btnride" Height="100" Width="132" >
                <StackPanel>
                    <Grid Height="100" Width="132">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="1*"/>
                            <ColumnDefinition Width="1*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="1*"/>
                            <RowDefinition Height="3*"/>
                        </Grid.RowDefinitions>
                        <Grid Grid.Row="0" Grid.ColumnSpan="2" Background="Aquamarine">
                            <Label Content="naam"/>
                        </Grid>
                        <Grid Grid.Column="0" Grid.Row="1" Background="AntiqueWhite">
                            <StackPanel>
                                <Label Content="Binding id" FontSize="10"/>
                                <Label Content="Binding Naam" FontSize="10"/>
                                <Label Content="Binding AantalPassagiers" FontSize="10"/>
                                <Label Content="Binding TaxiNummer" FontSize="10"/>
                            </StackPanel>
                        </Grid>
                        <Grid Grid.Column="1" Grid.Row="1">

                        </Grid>
                    </Grid>
                </StackPanel>
            </Button>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

但现在我想在单击 ListViewItem 时获得位于第三个网格中第一个标签中的 id

获取 id 最简单的方法是什么?

我可以使用绑定将 id 绑定到其他标签吗? 还是我需要做其他事情?

ObcRitten 是一个公共的 ObservableCollection 并且充满了 Rit Rit 示例

Rit rit1 = new Rit

    id = 20,
    AantalPassagiers = 5,
    Naam = "Jan",
    TaxiNummer = 1
;

【问题讨论】:

【参考方案1】:

DataTemplate 中的所有元素共享同一个 DataContext,即Rit item。要在不同位置显示两次id,您需要创建两个标签,并将两者绑定到id

<Grid Grid.Column="1" Grid.Row="1">
     <Label Content="Binding id" FontSize="10"/>
</Grid>

在 ListView 之外绑定到 ListView.SelectedItem:

<Label Content="Binding SelectedItem.id, ElementName=lvRitten" FontSize="10"/>

【讨论】:

我知道,但我需要列表视图之外的 id,列表视图中还有更多项目【参考方案2】:

在您的 ViewModel 中创建新属性:

public Rit SelectedRit get; set;

然后将此属性与 ListView 绑定:

<ListView SelectedItem = "Binding SelectedRit"..../>

【讨论】:

我不熟悉绑定我应该把属性放在哪里? @Jeffrey 在同一个班级,你的 ObservableCollection 在哪里【参考方案3】:

您可以将SelectedItem 属性转换为Rit 并访问id 属性:

Rit rit = lvRitten.SelectedItem as Rit;
if (rit != null)
    var id = rit.id;

您也可以像这样直接将其绑定到TextBlock

<TextBlock Text="Binding SelectedItem.id, ElementName=lvRitten" />

【讨论】:

以上是关于从选定的列表视图项中获取 id的主要内容,如果未能解决你的问题,请参考以下文章

如何获取列表视图选定行的小部件ID

如何从自定义列表视图中获取选定项目并在 toast 消息中打印?

Android - 无法从列表项中增加或减少值

如何在 Baseadapter 中获得位置

在列表视图项中动态设置图像视图很慢

在Android中按下提交按钮时使用自定义适配器从列表视图中获取选定项目