2013-08-04 44 views
0

C#WPF 我有一個列表視圖,其中有3列。我想要發生的是當我雙擊一行時,它會捕獲所選行的列值並將它們存儲爲變量,以便我可以將它們傳遞到另一個頁面或根據需要簡單地操作它們。我在這裏的是我的練習代碼。現在,我只是填充一個消息框,以查看是否可以正確地獲取變量。正在發生的事情是它不會從行中攫取任何東西。我想通過刪除if塊並且看到string name = selectedObject.ilName;爲空來解決這個問題。我有一個額外的問題是關於ingListLV.SelectedItems[0] as InventoryList聲明[0],究竟是指什麼?我初步認爲它引用了它返回的值,所以[0]將是第1列中的值,[1]將是第2列等,但我知道這是錯誤的。捕獲Listview行的內容作爲變量

這裏是我的XAML

<ListView x:Name="ingListLV" HorizontalAlignment="Center" Height="100" Margin="0,145,0,0" VerticalAlignment="Top" Width="Auto" 
       IsSynchronizedWithCurrentItem="True" 
       ItemsSource="{Binding}" 
       SelectedValuePath="InventoryName" 
       Style="{DynamicResource listViewStyle}" 
       MouseDoubleClick="Open_Edit"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn x:Name="InvName" Width="100" Header="Name" DisplayMemberBinding="{Binding Path=InventoryName}" /> 
       <GridViewColumn Width="50" Header="Qty" DisplayMemberBinding="{Binding Path=Qty}" /> 
       <GridViewColumn Width="50" Header="Type" DisplayMemberBinding="{Binding Path=Type}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

背後

private void Open_Edit(object sender, RoutedEventArgs e) 
    { 
    var selectedObject = ingListLV.SelectedItems[0] as InventoryList; 
    if (selectedObject == null) 
    { 
     return; 
    } 
    string name = selectedObject.ilName; 
    MessageBox.Show(name); 
    } 

public class InventoryList 
{ 
    public string ilName { get; set; } 
    public decimal ilQty { get; set; } 
    public string ilType { get; set; } 
} 

編輯 這裏是我在給ListView

private void LoadLV() 
    { 

     auroraDataEntities = new AuroraDataEntities(); 
     ObjectQuery<Inventory> inventories = auroraDataEntities.Inventories; 
     //Returns only opjects with a quantity greater than 0, so it won't show anything you are out of 
     var fillList = from q in inventories 
         where q.Qty > 0 
         select q; 
     ingListLV.ItemsSource = fillList.ToList(); 
    } 

回答

1

加載數據在ListView.SelectionMode我的代碼Single(默認)使用SelectedItem而不是SelectedItems

var selectedObject = ingListLV.SelectedItem as Inventory; 

[0]引用多選中的第一個選定項目(行)。

+0

所以在我的xaml中,我設置了'SelectionMode =「Single」'。並在上面的代碼中進行了所選的更改。它仍然填充爲空。當我正在瀏覽代碼時,我注意到'iList'沒有填充任何東西,所以它看起來仍然有問題從列表視圖中獲取值。 –

+0

什麼是iList?我希望這是DataContext中的列表,因爲您的ItemsSource綁定到DataContext中的對象。你在ListView中看到行嗎?如果你能選擇一個項目/一行? – LPL

+0

'iList'在類InventoryList中聲明。是的,我可以在ListView中看到行,是的,我可以在列表視圖中雙擊,並啓動'open_edit'方法,但它不會從列表視圖中拉取值 –