2010-11-09 54 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; 
相關問題