簡體   English   中英

如何處理 C# 中的這個轉換異常:system.windows.controls.CheckBox 中的 system.data.model?

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

這是我分析的 model 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
                }) ;
            }

But I'm getting an inavlid cast exception Impossible to cast an object of type 'System.Data.Entity.DynamicProxies.analys_F69488E20B133B223573E1D5931B83214F85574493596933EB8BFDBD5F513C59' in type '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工具包package的CheckListBox解決了這個問題。

我的目標是獲得選中復選框的值。 首先,我使用帶有 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);
              
            }


        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM