#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. Спасибо. Я добавил больше деталей выше.