捕获Listview行的内容作为变量

时间:2013-08-04 21:19:24

标签: c# wpf listview variables

C# WPF 我有一个列表视图,其中包含3列。我想要发生的是当我双击一行时,它将捕获所选行的列的值并将它们存储为变量,以便我可以将它们传递到另一个页面或者根据需要简单地操作它们。我在这里的是我的练习代码。现在,我只是填充一个消息框,看看我是否可以正确地获取变量。发生的事情是它没有从行中抓取任何东西。我通过删除if块找出了这一点,并看到string name = selectedObject.ilName;为空。我所提出的另一个问题是关于ingListLV.SelectedItems[0] as InventoryList [0]的陈述,究竟是指什么?我最初认为它引用了它返回的值,因此[0]将是第1列中的值,[1]将是第2列等,但我知道这是错误的。

这是我的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 个答案:

答案 0 :(得分:1)

ListView.SelectionMode Single(默认设置)中,使用SelectedItem而不是SelectedItems

var selectedObject = ingListLV.SelectedItem as Inventory;

[0]是指多重选择中的第一个选定项目(行)。