0

У меня есть listview, который заполняется через БД при помощи ItemSource. Я хочу при нажатии мышкой на элемент получить то, что там написано. Сразу говорю, пробовал string s = ListView.SelectedItem.text; выдаёт ошибку.

UPD: Прикладываю код

CS:

public List<Specialty> specs { get; set; }
        public List<Groups> groups { get; set; }
        public List<Subjects> subj { get; set; }
        public Specialty specialtyShow { get; set; }
        public Groups groupsShow { get; set; }
        public Subjects subjectsShow { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            specialtyShow = new Specialty();
            groupsShow = new Groups();
            subjectsShow = new Subjects();
            specs = DB.Connection.Specialty.ToList();
            groups = DB.Connection.Groups.ToList();
            subj = DB.Connection.Subjects.ToList();
            ListViewSpecialty.ItemsSource = specs;
            ListViewGroups.ItemsSource = groups;
            ListViewSubjects.ItemsSource = subj;
        }

Xaml:

<ListView Name="ListViewSpecialty" Background="Transparent" Grid.Row="0" ItemsSource="{Binding Specialty}" SelectionMode="Single">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Foreground="#FF8686" Content="{Binding Name}"></Label>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <ListView Name="ListViewGroups" Background="Transparent" Grid.Row="1" ItemsSource="{Binding Groups}" SelectionMode="Single">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Foreground="#FF8686" Content="{Binding Name}"></Label>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <ListView Name="ListViewSubjects" Background="Transparent" Grid.Row="2" ItemsSource="{Binding Subjects}" SelectionMode="Single">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Foreground="#FF8686" Content="{Binding Name}"></Label>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
NeoShima
  • 143
  • А у вас ItemSource заполнется коллекцией которая содержит свойство text ? показалибы лучше код заполнения этого листа, было бы понятнее – Pavel Popov Oct 23 '20 at 12:32
  • Вам ведь показали в предыдущем примере как надо писать проект, так от куда у вас появилось вдруг ListView.SelectedItem.text? Работайте со свойствами, привязками! Сделали свойство public SomeClass SomeProp {get;set;}, сделали привязку <ListView SelectedItem="{Binding SomeProp}" ...> и все, радуетесь жизни без каких либо лишних проблем. Поймите вы то, что вам дали в предыдущем примере, напишите это сами, с нуля и тогда, подобных вопрос вовсе не будет. – EvgeniyZ Oct 23 '20 at 12:32
  • 1
    Смотрю я в ваш код, и не понимаю, почему этот ответ на ваш прошлый вопрос был хоть и принят, но проигнорирован вами. Ваш код не похож на то, что вы хотя-бы частично разобрались с тем, как это работает. Быть может, все-таки попытаетесь? Тогда текущий вопрос решится вообще сам собой. Создайте пустой проект, внесите туда код из ответа и пробуйте. – aepot Oct 23 '20 at 12:46
  • <Label> в WPF не рекомендуется использовать, это наследие от WinForms, используйте <TextBlock> вместо него. Он ест меньше памяти, и быстрее работает. – aepot Oct 23 '20 at 12:50
  • мда, понятнее не стало:-) – Pavel Popov Oct 23 '20 at 12:50
  • Модераторы, объясните пожалуйста, что это за вырезание полезных комментариев? Я оскорбил, унизил или сказал что-то не по делу? Напишите тогда мне пожалуйста лично или еще как в чем я не прав. Не красиво с вашей стороны такое делать! По поводу string s = ListView.SelectedItem.text; выдаёт ошибку. - SelectedItem - это вроде object, который сначала надо скастовать в нужный тип (var item = (SomeClass)SelectedItem; item.text). – EvgeniyZ Oct 23 '20 at 12:51
  • @EvgeniyZ про модерку, вы очень строго относитесь к новичкам, это может не всем зайти (это моё личное, никого не интересующее мнение). А так верно, если в лоб, то вот так получается string s = ((Specialty)ListViewSpecialty.SelectedItem).Name. – aepot Oct 23 '20 at 12:58
  • @aepot Строго в чем, что я сказал автору вопроса перечитать предыдущий ответ и понять его, что надо использовать привязки (показал как), а не делать то, что написано в вопросе? Где строгость-то? Даже если это для кого-то и строго, то это не повод удалять комментарии и выпиливать упоминания его из других! – EvgeniyZ Oct 23 '20 at 13:00
  • @EvgeniyZ упоминание я сам выпилил, когда увидел что коммент удален. :) – aepot Oct 23 '20 at 13:01
  • public MainWindow() - никогда не вставляйте свой код в конструктор, используйте обработчик события Window.Loaded вместо этого. – aepot Oct 23 '20 at 13:05

0 Answers0