#c# #checkbox #casting #system.data
#c# #флажок #Кастинг #system.data
Вопрос:
Это мой модельный класс анализа
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; }
}
}
Я создаю список, в котором флажки отображаются в виде элементов, а содержимое каждого из них — это имя анализа.
Итак, я пытаюсь установить содержимое флажков и сохранить их в списке с приведенным ниже кодом
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, при котором невозможно привести объект типа ‘System.Data.Entity.DynamicProxies.analys_F69488E20B133B223573E1D5931B83214F85574493596933EB8BFDBD5F513C59 «в системе типа «.Windows.Элементы управления.Флажок ‘.’ который я пытаюсь разрешить. Но мне не удалось.
Пожалуйста, мне нужна помощь. Спасибо.
Ответ №1:
в этой строке
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
});
}
Комментарии:
1. Проблема в том, что в списке нет метода для отслеживания установленных флажков. Таким образом, возникает ошибка с кодом _biochimieExam. BiochimieExamsItemsControl. Проверенные элементы
2. Есть ли какой-нибудь ItemsControl, который может отслеживать отмеченные флажки как элементы?
3. Я забыл упомянуть в своем ответе, что на самом деле вы должны использовать CheckedListBox , еще один стандартный элемент управления, который имеет те же функции, что и ListBox, плюс флажки.
Ответ №2:
Я, наконец, решил проблему, используя контрольный список пакета Xceed toolkit.
Моей целью было получить значение установленных флажков. Сначала я использовал список с флажками в качестве элементов. И именно поэтому я пишу этот код
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);
}
}