【问题标题】:Can't get value from selected item in listview WPF无法从列表视图 WPF 中的选定项目中获取值
【发布时间】:2010-11-09 20:49:53
【问题描述】:

我有一个表单,用户可以在其中输入有关新库存项目的数据(ID、标题、价格、日期等)。输入的数据会保存到集合中,然后在列表视图中重新显示。

我得到一个指向“key = (int)lvwInventory.SelectedItems[0];”的“Specified cast is not valid”尝试提取所选值时。我正在尝试获取 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>

库存对象类

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);
    }

【问题讨论】:

    标签: c# wpf xaml listview


    【解决方案1】:

    所选项目是 StockObject 本身,这就是它不允许您将其转换为 int 的原因。你需要这样的东西:

    var selectedStockObject = lvwInventory.SelectedItems[0] as StockObject;
    if(selectedStockObject == null)
    {
       return;
    }
    
    key = selectedStockObject.ID; //I'm assuming you want the ID as your key
    

    【讨论】:

      【解决方案2】:

      问题是您的列表视图绑定到col,它恰好是StockObjects 的集合。所以你的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);
      }
      

      ?

      【讨论】:

        【解决方案3】:

        这就是我得到它的方式!

        获取列表视图项

        SearchedPurchases Purchase_Invoice = (SearchedPurchases)listView1.SelectedItems[0];
        string PurchaseInvoice = Purchase_Invoice.InvoiceNo;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-31
          • 1970-01-01
          • 2016-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-09
          相关资源
          最近更新 更多