2010-11-09 53 views
1

我有一个表单,用户输入有关新库存项目(id,title,price,date等)的数据。输入的数据保存到一个集合中,然后在列表视图中重新显示。无法从列表视图中的选定项目获取价值WPF

我得到一个“指定的转换无效”,指向“key =(int)lvwInventory.SelectedItems [0];”当试图提取选定的值。我试图将ID取出并用它打开该项目的编辑窗口。

我在这里做错了什么?问题

列表视图

<ListView Height="249" HorizontalAlignment="Left" Margin="27,28,0,0" Name="lvwInventory" VerticalAlignment="Top" Width="384" ItemsSource="{Binding col}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" /> 
      <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" /> 
      <GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price}" /> 
      <GridViewColumn Header="Date Added" DisplayMemberBinding="{Binding Date}" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

stockobject类

public class StockObject 
    { 
     // create stock object properties 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public DateTime Date { get; set; } 
     public double Price { get; set; } 
     public char Type { get; set; } 

事件正试图获取价值选择的项目

private void btnViewItem_Click(object sender, RoutedEventArgs e) 
    { 
     int key; 

     if (lvwInventory.SelectedIndex == -1) return; 

     key = (int)lvwInventory.SelectedItems[0]; 

     StockObject s = col[key]; 
     bookDialog.View(s); 
    } 

回答

5

所选项目是StockObject本身,这就是为什么它不会让你把它转换成整数。你需要的东西是这样的:

var selectedStockObject = lvwInventory.SelectedItems[0] as StockObject; 
if(selectedStockObject == null) 
{ 
    return; 
} 

key = selectedStockObject.ID; //I'm assuming you want the ID as your key 
+0

感谢这并获得成功。 – Jerry 2010-11-09 21:17:25

2

的事情是,你的列表视图对col,这恰好是StockObject个集合约束。所以你的SelectedItems[0]StockObject,而不是int

而不是

key = (int)lvwInventory.SelectedItems[0]; 
StockObject s = col[key]; 

你只需要

StockObject s = (StockObject)lvwInventory.SelectedItems[0]; 

也许你想要SelectedItem

private void btnViewItem_Click(object sender, RoutedEventArgs e) 
{ 
    StockObject s = lvwInventory.SelectedItem; 
    if (s != null) 
     bookDialog.View(s); 
} 

1

这是我得到它的方式!

获取ListView项

SearchedPurchases Purchase_Invoice = (SearchedPurchases)listView1.SelectedItems[0]; 
string PurchaseInvoice = Purchase_Invoice.InvoiceNo; 
相关问题