Не удается преобразовать выбранный элемент DataGrid в тип объекта

#wpf #datagrid #casting #selecteditem

#wpf #datagrid #Кастинг #выбранный элемент

Вопрос:

Я надеюсь, что кто-нибудь сможет мне в этом помочь. Я занимался этим со вчерашнего дня и ничего не добился.

У меня есть сетка данных, содержащая список общих ресурсов, общий ресурс — это тип.
Каждый общий ресурс содержит список, содержащий историю общего ресурса за последние 30 дней. Я хочу отобразить историю выбранных элементов в виде графика.

Я не знаю, возможно ли привязать график непосредственно к datagrid, но не думаю, что это сработает для меня, поскольку мой следующий шаг — разрешить множественный выбор и отобразить их все на одном графике.

Последнее, что я пробовал в качестве теста, было:

String test = ((Share)ShareGrid.Элементы [ShareGrid.SelectedIndex]).Бегущая строка;

Выдает ошибку {«Невозможно преобразовать объект типа ‘Share’ в тип ‘ProjectMain.Поделиться’.»} ProjectMain — мое пространство имен

Я также пытался

Общий тест = ShareGrid.SelectedItem как общий ресурс;

Тест просто остается нулевым.

Я перепробовал несколько вариантов в этих темах, но, очевидно, чего-то не хватает, поэтому буду признателен за любую помощь.

Спасибо.

Джо

Подробнее: я привязываю список портфолио следующим образом:

         PortfolioListBox.ItemsSource = MainWindow.LoggedOnUser.Portfolio;
        PortfolioListBox.SelectedIndex = 0;
  

Я привязываю сетку общего доступа на основе списка портфолио следующим образом:

     private void PortfolioListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        listPortfolio = (PortfolioListBox.SelectedItem as Portfolio);
        ShareGrid.ItemsSource = listPortfolio.Share;
        ShareGrid.SelectedIndex = 0;
    }
  

XML для окна списка портфолио:

                         <ListBox Name ="PortfolioListBox" 
                                 DisplayMemberPath="name" 
                                 SelectionChanged="PortfolioListBox_SelectionChanged"
                                 DataContext="{Binding Path=SelectedItem}"/>
  

Для сетки общего доступа настроен xml следующим образом:

 <DataGrid   AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Left" 
    Name="ShareGrid" VerticalAlignment="Top" SelectionMode="Extended" 
    SelectionUnit="FullRow" SelectionChanged="ShareGrid_SelectionChanged"
        CanUserResizeRows="False" CanUserResizeColumns="False" FrozenColumnCount="1" 
        FontSize="16" IsReadOnly="True" DataContext="{Binding Path=SelectedItem}">
  

Комментарии:

1. В сообщении Unable to cast object of type 'Share' to type 'ProjectMain.Share предполагается, что у вас вызвано два класса Share , один в ProjectMain пространстве имен и один не в каком-либо пространстве имен. Правильно ли это?

Ответ №1:

Это должно работать при условии, что элемент выбран.

     Share test = ShareGrid.SelectedItem as Share;
  

Вы проверяете, выбран ли элемент с помощью

     ShareGrid.SelectedIndex >= 0 
  

Если элемент не выбран, SelectedIndex будет равен -1

Комментарии:

1. Спасибо за ответ. Да, я думал, что это должно сработать, но это не так. Может ли это быть как-то связано с тем, как я настроил сетку данных или как я ее заполнил. Вот как он заполняется: Portfolio listPortfolio = (PortfolioListBox.SelectedItem как Portfolio); ShareGrid. ItemsSource =listPortfolio. Поделиться; ShareGrid.SelectedIndex = 0; Все предложения принимаются с благодарностью. Спасибо, Джо

2. Отображаются ли ваши данные в сетке? Если портфолио общедоступного свойства?

3. Да, все отображается в сетке так, как должно. Портфолио — это другой класс.

4. Поймите, что портфолио — это класс. Пожалуйста, отправьте код, в котором вы привязываете эту DataGrid.

5. Спасибо. Я добавил больше деталей выше.