如何在 C# 中处理此强制转换异常:system.data.model in system.windows.controls.CheckBox?

How can I handle this cast exception in C# : system.data.model in system.windows.controls.CheckBox?

这是我的模型class 分析

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

但我遇到了一个无效的强制转换异常 无法将类型为 'System.Data.Entity.DynamicProxies.analys_F69488E20B133B223573E1D5931B83214F85574493596933EB8BFDBD5F513C59' 的对象转换为 'System.Windows.Controls.CheckBox'.' 类型,我尝试解决该异常.但是我失败了。

拜托,我需要一些帮助。谢谢

在这一行

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

终于用Xceed工具包的CheckListBox解决了问题

我的 objective 是获取选中复选框的值。首先,我使用带有 CheckBoxes 的 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);
              
            }


        }