Как я могу добавить CheckBoxList в список <>?

У меня есть, например, список из 5 элементов флажка:

    <ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
        <CheckBox x:Name="Item1" Content="Item1" Checked="Item1_Checked"/>
        <CheckBox x:Name="Item2" Content="Item2" Checked="Item2_Checked"/>
        <CheckBox x:Name="Item3" Content="Item3" Checked="Item3_Checked"/>
        <CheckBox x:Name="Item4" Content="Item4" Checked="Item4_Checked"/>
        <CheckBox x:Name="Item5" Content="Item5" Checked="Item5_Checked"/>
    </ListBox>

Для каждого установленного флажка я хочу, чтобы элемент был добавлен в список с именем myList.

Итак, я попробовал это:

    public MainWindow()
    {
        InitializeComponent();
    }

    List<string> myList;

    private void Item1_Checked(object sender, RoutedEventArgs e)
    {
        myList.Add(Item1);
    }

Проблема в том, что "Item1" не является объектом, поэтому его нельзя добавить в список объектов.

После того, как в моем списке есть несколько объектов, я хочу отсортировать их в определенном порядке, например по имени, и затем отобразить список в готовых шаблонах.

Какие-либо предложения?

Надеюсь, что вы понимаете меня, мой английский не идеален, и я новичок в C# и wpf:P

1 ответ

Решение

Вам нужно использовать Source собственность RoutedEventsArgs параметр передан проверенному обработчику. Также вы можете использовать один и тот же обработчик событий для всех флажков:

<ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
    <CheckBox x:Name="Item1" Content="Item1" Checked="Item_Checked"/>
    <CheckBox x:Name="Item2" Content="Item2" Checked="Item_Checked"/>
    <CheckBox x:Name="Item3" Content="Item3" Checked="Item_Checked"/>
    <CheckBox x:Name="Item4" Content="Item4" Checked="Item_Checked"/>
    <CheckBox x:Name="Item5" Content="Item5" Checked="Item_Checked"/>
</ListBox>


private void Item_Checked(object sender, RoutedEventArgs e)
{
    myList.Add((e.Source as CheckBox).Name);
}

Элемент управления, инициировавший событие, находится в RoutedEventArgs.Source, Вы должны привести его, конечно, к типу управления.

В вашем конкретном случае вы также можете использовать sender, но обычно безопаснее полагаться на Source имущество.

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