WPF Listbox с флажками, которые отображаются пустыми, добавляются динамически - PullRequest
1 голос
/ 05 мая 2010

Я пытаюсь заполнить список со списком флажков серии, однако после запуска кода под списком в нем есть пустые записи, которые можно выбрать, т.е. появляется синяя полоса. Однако ни текст, ни флажок не отображаются.

for (int num = 1; num <= 10; num++)
{
   CheckBox checkBox = new CheckBox();
   checkBox.Text = "sheet" + num.ToString();
   checkBox.Name = "checkbox" + num.ToString();

   thelistbox.Items.Add(checkBox);
}

Ответы [ 3 ]

8 голосов
/ 05 мая 2010

Лучший способ справиться с этим - создать список данных - в вашем случае список чисел (или список строк (sheet1, sheet2 и т. Д.). Затем вы можете назначить этот список чисел для thelistbox. .ItemsSource. Внутри XAML вашего списка установите ItemTemplate для включения CheckBox и привяжите число к тексту флажка.

1 голос
/ 25 апреля 2011

Чтобы прокомментировать комментарий Брайана, вот схема простого списка флажков в C # wpf. Для этого потребуется больше кода для обработки флажков / снятия флажков и общих обработчиков после взаимодействия. Эта настройка представляет разницу в элементах в двух списках объектов (определенных в другом месте) в списке флажков.

XAML

...
    <ListBox Name="MissingNamesList" ItemsSource="{Binding TheMissingChildren}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <CheckBox Content="{Binding Path=Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
...

Поддерживающий код C #:

...
public partial class MissingNamesWindow : Window
{    
    // Make this accessible from just about anywhere
    public ObservableCollection<ChildName> TheMissingChildren { get; set; }

    public MissingNamesWindow()
    {
        // Build our collection so we can bind to it later
        FindMissingChildren();

        InitializeComponent();

        // Set our datacontext for this window to stuff that lives here
        DataContext = this;
    }

    private void FindMissingChildren()
    {
        // Initialize our observable collection
        TheMissingChildren = new ObservableCollection<ChildName>();

        // Build our list of objects on list A but not B
        List<ChildName> names = new List<ChildName>(MainWindow.ChildNamesFromDB.Except(
                                                    MainWindow.ChildNamesFromDisk).ToList());

        // Build observable collection from out unique list of objects
        foreach (var name in names)
        {
            TheMissingChildren.Add(name);
        }
    }
}
...

Надеюсь, это прояснит немного.

1 голос
/ 05 мая 2010

Попробуйте изменить

checkBox.Text = "sheet" + num.ToString();

до

checkBox.Content = "sheet" + num.ToString();

С этим изменением я смог успешно использовать ваш пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...