Как заполнить ListBox программными данными в Silverlight? - PullRequest
0 голосов
/ 22 марта 2011

Пытаясь заполнить список программно, я написал следующий код:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            TestDBContext context = new TestDBContext();
            context.Load(context.GetTaskQuery());

        var taskList = GetTasks();
        foreach (var t in taskList)
        {
            ListBoxTaskItems.Items.Add(t);

        }
    }

    private List<TaskItem> GetTasks()
    {
        var tasks = from t in context.Tasks
                    select new TaskItem(t);
        return tasks.ToList();
    }

Проблема в том, что приведенный выше код всегда возвращает пустой ListBox. Кто-нибудь знает, как изменить существующий код или другой способ программно заполнить список с вводами данных?

Редактирование # 1: Во время отладки я заметил, что метод GetTasks () выполняется до context.GetTaskQuery (), и я догадываюсь, что это причина пустого ListBox. Тем не менее я не знаю, как исправить код, чтобы заполнить ListBox.

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Кто-то опубликовал другое решение, затем по какой-то причине удалил его, но это могло бы работать лучше. Я только что попробовал это в некотором коде, над которым я работаю, и обнаружил, что это было быстрее:

Binding bind = new Binding();

bind.Source = GetTasks();

ListBoxTaskItems.SetBinding(ListBox.ItemsSourceProperty, bind);

(Замените это для оператора foreach).

0 голосов
/ 22 марта 2011

Я бы попробовал это так в вашем выражении foreach:

ListBoxItem listBoxItem = new ListBoxItem();

listBoxItem.Content = t;

ListBoxTaskItems.Items.Add(listBoxItem);

Я делаю что-то похожее, и это работает при добавлении гридов в ListBox, при условии, что TaskItem является чем-то приемлемым в качестве контента, который должен это делать.

...