Как я могу обработать это исключение приведения в С#: system.data.model в system.windows.controls.CheckBox?

Это мой модельный класс анализа

public partial class analys
    {
        public int id { get; set; }
        public string name { get; set; }
        public int price { get; set; }
        public bool Type_qualitatif { get; set; }
        public bool Type_quantitatif { get; set; }
        public System.DateTime create_at { get; set; }
        public System.DateTime update_at { get; set; }
        public int sectionId { get; set; }
    
        public virtual section section { get; set; }
    }
}

Я создаю ListBox, в котором флажки отображаются как элементы, а содержимое каждого из них — это имя анализа.

Итак, я пытаюсь проверить содержимое флажков и сохранить их в списке с кодом ниже

foreach ( CheckBox item in  _biochimieExam.BiochimieExamsItemsControl.Items )
             {
                 if (item.IsChecked == true)
                 {
                   //  String exam = item.Content.ToString();
                     SelctedItems.Add(item.Content.ToString());
                 }
             } 
            
            foreach(String item in SelctedItems)
            {
                BchExamsList.Add(new analys
                {
                    name = item
                }) ;
            }

Но я получаю исключение inavlid cast. Невозможно преобразовать объект типа «System.Data.Entity.DynamicProxies.analys_F69488E20B133B223573E1D5931B83214F85574493596933EB8BFDBD5F513C59» в тип «System.Windows.Controls.CheckBox». ' который я пытаюсь решить. Но я потерпел неудачу.

Пожалуйста, мне нужна помощь. Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
146
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

в этой строке

foreach ( CheckBox item in _biochimieExam.BiochimieExamsItemsControl.Items )

вы пытаетесь рассматривать каждый элемент в _biochimieExam.BiochimieExamsItemsControl.Items как флажок, но элементы в _biochimieExam.BiochimieExamsItemsControl.Items ar имеют тип analys.

попробуйте это вместо этого:

foreach (analys item in _biochimieExam.BiochimieExamsItemsControl.CheckedItems)
{
    BchExamsList.Add(new analys
    {
        name = item.name
    });
}

Проблема в том, что у ListBox нет метода для отслеживания отмеченных флажков. Значит ошибка с кодом _biochimieExam.BiochimieExamsItemsControl.CheckedItems

DOUHADJI 14.12.2020 09:29

Есть ли какие-либо элементы управления, которые могут отслеживать отмеченные флажки как элементы?

DOUHADJI 14.12.2020 09:31

Я забыл упомянуть в своем ответе, что на самом деле вам следует использовать CheckedListBox, еще один стандартный элемент управления, который имеет те же функции, что и ListBox, а также флажки.

Disti 14.12.2020 09:36
Ответ принят как подходящий

Наконец, я решил проблему, используя пакет инструментов CheckListBox из Xceed.

Моя цель состояла в том, чтобы получить значение проверенных флажков. Сначала я использовал ListBox с флажками в качестве элементов. И именно поэтому я пишу этот код

foreach ( CheckBox item in  _biochimieExam.BiochimieExamsItemsControl.Items )
             {
                 if (item.IsChecked == true)
                 {
                   //  String exam = item.Content.ToString();
                     SelctedItems.Add(item.Content.ToString());
                 }
             } 
            
            foreach(String item in SelctedItems)
            {
                BchExamsList.Add(new analys
                {
                    name = item
                }) ;
            }

Чтобы решить мою проблему, я вношу следующие изменения в свой код:

Xaml


 <XceedToolkit:CheckListBox Margin = "5,5" x:Name = "BiochimieExamsItemsControlXceed" 
                                   ValueMemberPath = "name"  DisplayMemberPath = "name" FontWeight = "Bold"
                                   SelectedMemberPath = "name" SelectedValue = "{Binding SelectedValue}"  
                                   SelectedItemsOverride = "{Binding SelectedItems}"
                                   Style = "{DynamicResource ListAnalysesItemsControlXceed}" ItemSelectionChanged = "BiochimieExamsItemsControlXceed_ItemSelectionChanged" >

            <XceedToolkit:CheckListBox.Resources>
                <Style TargetType = "CheckBox">
                    <Style.Triggers>
                        <Trigger Property = "IsChecked" Value = "True">
                            <Setter Property = "Background" Value = "white"></Setter>
                        </Trigger>
                        <Trigger Property = "IsMouseOver" Value = "True">
                            <Setter Property = "Background" Value = "Gray"></Setter>
                        </Trigger>
                        <Trigger Property = "IsKeyboardFocusWithin" Value = "True">
                            <Setter Property = "Background" Value = "white"></Setter>
                        </Trigger>
                    </Style.Triggers>
                    <Setter Property = "Background" Value = "White" />
                    <Setter Property = "MinHeight" Value = "16"/>
                    <Setter Property = "VerticalContentAlignment" Value = "Center"/>
                    <Setter Property = "Margin" Value = "8,2"/>
                    
                    
                 
              
                </Style>
            </XceedToolkit:CheckListBox.Resources>
            
        </XceedToolkit:CheckListBox>

И в коде позади:

public ObservableCollection<Object> BchSelectedExams { get; set; }


        public void BiochimieExamsItemsControlXceed_ItemSelectionChanged(object sender, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventArgs e)
        {
           
            BchSelectedExams = (ObservableCollection<object>)BiochimieExamsItemsControlXceed.SelectedItems;
           

            foreach (analys o in BiochimieExamsItemsControlXceed.SelectedItems)
            {
                Console.WriteLine(o.name);
              
            }


        }

Другие вопросы по теме

Похожие вопросы

Использовать имя пользовательского элемента управления без префикса пространства имен
Запрос LINQ не соответствует проверке даты и времени
Строка не была распознана как допустимая дата и время при преобразовании стандартного арабского времени в дату и время
Создайте MemoryStream, который покрывает раздел массива байтов без копирования данных в памяти
Как отсортированные наборы для С# работают с пользовательскими объектами?
Роль Azure AD не отображается в токене аутентификации или идентификатора для гостевого пользователя
Как использовать WorksheetFunction.CountIf в С#?
С#, каков риск вызова асинхронного метода и никогда не ожидание возвращенной задачи или сохранение ссылок на указанную задачу
Как пропустить сноску в конце CSV-файла с помощью CsvHelper
С# экспортирует большие таблицы SQL Server в пакетах/фрагментах, используя DataReader и модуль записи CSV