获取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];
数据表和列表框##
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
,因此不能强制转换为该类型,因此lbi
是null
。
在DataTemplate中,您将绑定到属性FirstName
和LastName
。必须有一个类定义这些属性,我们称之为Person
。
我猜如下,因为您还没有显示。您正在将ListBox的ItemSource
绑定到Person
对象的集合,该集合由dataSet1.Tables[0]
返回的对象的某些属性提供(因为您将List1.DataContext
设置为该值)。
因此,你必须写以下内容才能获得所选项目:
Person lbi = List1.SelectedItems as Person;
并将Person
替换为应用程序中的任何类型。