Не удается получить значение из выбранного элемента в представлении списка WPF - PullRequest
1 голос
/ 09 ноября 2010

У меня есть форма, где пользователь вводит данные о новом элементе инвентаря (идентификатор, заголовок, цена, дата и т. Д.).Введенные данные сохраняются в коллекцию, а затем снова отображаются в виде списка.

Я получаю «Указанное приведение неверно», указывающее на «key = (int) lvwInventory.SelectedItems [0];»при попытке извлечь выбранное значение.Я пытаюсь получить идентификатор и использовать его, чтобы открыть окно редактирования для этого элемента.

Что я здесь не так делаю?

представление списка в вопросе

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

Ответы [ 3 ]

6 голосов
/ 10 ноября 2010

Выбранный элемент - это сам 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 голосов
/ 10 ноября 2010

Дело в том, что ваш вид списка связан с 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 голос
/ 23 июня 2012

Вот как я понял!

Получить элемент списка

SearchedPurchases Purchase_Invoice = (SearchedPurchases)listView1.SelectedItems[0];
string PurchaseInvoice = Purchase_Invoice.InvoiceNo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...