获取wpf中SelectedItem的值

本文关键字:的值 SelectedItem wpf 获取 | 更新日期: 2023-09-27 18:24:11

我在WPF页面中有一个ListBox,其中的每个项都由两个标签组成。我给他们起了名字FirstName,LastName:

<ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Name="FirstName" Text="{Binding FirstName}" Margin="0,0,10,0"/>
                <TextBlock Grid.Column="1" Name="LastName" Text="{Binding LastName}" HorizontalAlignment="Left"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>

当用户选择Listbox的一个Item时,我希望将它们的值单独保存,以便将它们传递给另一个Page。我试图在代码背后达到这个目的:

 ListItemCollection lbi = List1.SelectedItem as ListItemCollection;
        string first = lbi.FirstListItem.DataContext.ToString();
        string last = lbi.LastListItem.DataContext.ToString();

然而,我在字符串的定义中得到了一个nullReferenceException?这样有什么不对?如何获取SelectedItem值?

更新:绑定值派生自具有SQL查询的SQLAdapter。查看后面的代码:

SqlDataAdapter dAdapt1 = new SqlDataAdapter(sqlStr1, cnStr);
        DataSet dataSet1 = new DataSet();
        dAdapt1.Fill(dataSet1);
        List1.DataContext = dataSet1.Tables[0];

获取wpf中SelectedItem的值

数据表和列表框##

myDataSet.BookTable.firstColumn和lastColumn。

绑定就绪

1.

adapter.Fill(myDataSet, "BookTable"); 

2.

myListBox.DataContext = myDataSet;

绑定开始

3.XAML

<ListBox ItemsSource="{Binding Path=BookTable}"  

4。窗口.资源>

<DataTemplate x:Key="BookItemTemplate">
                <Grid>
  <TextBlock Text="{Binding Path=first}" Grid.Column="0"/> 
  <TextBlock Text="{Binding Path=last}" Grid.Column="1" /> 

5.

ItemTemplate ="{StaticResource BookItemTemplate}"/>

结合端

6.

DataRowView d1=List1.SelectedItem as DataRowView;
string first =d1["first"].tostring();
string last =d1["last"].tostring();

正如Andy所评论的,List1.SelectedItem不是ListItemCollection,因此不能强制转换为该类型,因此lbinull

在DataTemplate中,您将绑定到属性FirstNameLastName。必须有一个类定义这些属性,我们称之为Person

我猜如下,因为您还没有显示。您正在将ListBox的ItemSource绑定到Person对象的集合,该集合由dataSet1.Tables[0]返回的对象的某些属性提供(因为您将List1.DataContext设置为该值)。

因此,你必须写以下内容才能获得所选项目:

Person lbi = List1.SelectedItems as Person;

并将Person替换为应用程序中的任何类型。