开发者

WPF Listbox with checkboxes appearing blank, added dynamically

I'm trying to populate a listbox with a series checkbox entries, however once running the code below the listbox has blank entries in it, which are selectable, i.e. a blue bar appears. Howev开发者_JAVA技巧er neither the text or checkbox appears.

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);
}


The best way to handle this is to create a list of data -- in your case, a list of numbers (or a list of strings (sheet1, sheet2, etc). You can then assign that list of numbers to thelistbox.ItemsSource. Inside the XAML of your listbox, set the ItemTemplate to include a CheckBox and bind the number to the text of the checkbox.


Try changing

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

to

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

With that change, I was able to use your example successfully.


To follow up on Brian's comment, here is an outline of a simple checkbox list in C# wpf. This will need more code to handle checking/unchecking boxes and general post-interaction handlers. This setup presents the difference in elements on two lists of objects (defined elsewhere) in a checkbox list.

The XAML

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

The supporting C# code:

...
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);
        }
    }
}
...

Hope that clarifies a bit.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜