如何在wpf列表视图中获得选定行的列值
本文关键字:wpf 列表 视图 | 更新日期: 2023-09-27 17:49:31
在我的listview中,我有三列,第一列显示为带有图像的文本,其余列仅显示文本。listview的编码如下:
<TabItem x:Name="HistoryTab" Header="History" Style="{StaticResource TabStyle}">
<Grid>
<ListView x:Name="HistoryTabLv" HorizontalAlignment="Left" Height="164" Width="275" VerticalAlignment="Top" SelectionChanged="HistoryTabLv_SelectionChanged" SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn x:Name="TimeColumn" Header="Time" Width="85">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="-5,0,0,0">
<Image x:Name="Img" Height="12" Width="12" Source="{Binding Image}" Stretch="Uniform"/>
<TextBlock Text="{Binding Time}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="PhoneNumColumn" Header="Phone Number" Width="85" DisplayMemberBinding="{Binding PhoneNum}" />
<GridViewColumn x:Name="DirectionColumn" Header="Direction" Width="95" DisplayMemberBinding="{Binding Direction}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</TabItem>
如果action语句为真,相关数据将被绑定到每一列,如下所示。
private void HistoryTabLv_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (myStatement == true)
{
var uri = new Uri(@"/Resources/time.png", UriKind.Relative);
myImg = new BitmapImage(uri);
DateTime myTime = DateTime.Now;
HistoryTabLv.Items.Insert(0, new { Image = myImg, Time = myTime.ToString("hh:mm:ss tt"), PhoneNum = calledNum,
Direction = "Called out" });
}
}
在winform中,如果我想获得所选行的第二列值,它是这样编码的:(基于我搜索的内容)
string secondCol = lv.SelectedItems[0].SubItems[1].Text;
我想获得所选行的第二列值(在我的情况下是PhoneNum列),我如何在WPF中做到这一点。我尝试了下面的代码,但它不起作用。请帮助。
string myText = (string)((DataRowView)HistoryTabLv.SelectedItems[0])["PhoneNum"];
在WPF中,ListViewItem
只是您的内容对象的包装器,SelectedItem(s)
将与源集合中的项目具有相同的类型,因此通常您会将HistoryTabLv.SelectedItem
转换为该类型,但是因为,据我所知,您使用匿名类型会使其变得更加困难。我认为最简单的方法是围绕你的问题是使用dynamic
dynamic selectedItem = HistoryTabLv.SelectedItem;
var phoneNum = selectedItem.PhoneNum;
或
dynamic selectedItem = HistoryTabLv.SelectedItems[0];
var phoneNum = selectedItem.PhoneNum;
编辑
如果您要为您的项目创建类,如
public class MyItemClass {
public string Image { get; set; }
public string Time { get; set; }
public string PhoneNum { get; set; }
public string Direction { get; set; }
}
和创建您的项目,如
new MyItemClass {
Image = myImg,
Time = myTime.ToString("hh:mm:ss tt"),
PhoneNum = calledNum,
Direction = "Called out"
}
那么你可以将SelectedItem(s)
强制转换为你的项目类,如
var selectedItem = (MyItemType)HistoryTabLv.SelectedItem