Это мой модельный класс анализа
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». ' который я пытаюсь решить. Но я потерпел неудачу.
Пожалуйста, мне нужна помощь. Спасибо.
в этой строке
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
});
}
Есть ли какие-либо элементы управления, которые могут отслеживать отмеченные флажки как элементы?
Я забыл упомянуть в своем ответе, что на самом деле вам следует использовать CheckedListBox, еще один стандартный элемент управления, который имеет те же функции, что и ListBox, а также флажки.
Наконец, я решил проблему, используя пакет инструментов 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);
}
}
Проблема в том, что у ListBox нет метода для отслеживания отмеченных флажков. Значит ошибка с кодом _biochimieExam.BiochimieExamsItemsControl.CheckedItems