добавить элементы longlistselector без блокировки пользовательского интерфейса - PullRequest
0 голосов
/ 05 ноября 2011

Я использую longlistselector в своем приложении WP7.В этом приложении longlistselector может быть заполнен несколькими элементами (более 20) с немного сложным шаблоном item.В том случае, когда пользователь нажимает кнопку, которая заполняет список, пользовательский интерфейс зависает в течение 3,4 или более секунд, ожидая заполнения списка.Моя идея состояла в том, чтобы показать список во время его заполнения, я создаю таймер и каждый тик я добавляю элемент в список.Визуально идея работает, а пользовательский интерфейс не зависает ... к сожалению, longlistselector добавляет все элементы, но в неправильные группы.После некоторых тестов я повторяю проблему также не в потоке.Вот код:

Вот класс Group, связанный с longlistselector ItemsSource:

public class TaskByProject : ObservableCollection<TaskInProjectGroup>
{


    public TaskByProject(List<Task> tasks)
    {
          // here groups are created and list is populated

    }
}

public class TaskInProjectGroup : ObservableCollection<Task>
{
    public TaskInProjectGroup(string category)
    {
        Key = category;
    }

    public string Key { get; set; }


    public bool HasItems { get { return Count > 0; } }
}

Это код, который я использую для загрузки данных:

    TaskByProject tasksVisibili;

    // create a taskyproject with the same groups of taskView 
    tasksVisibili = new TaskByProject(emptylist of tasks);


    lbToday.ItemsSource = tasksVisibili;

Затем создайте кнопку, чтобы добавить элементы к задачам. Visibili:

    private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        tasksVisibili[0].Add(task1);
        tasksVisibili[1].Add(task2);
        tasksVisibili[2].Add(task3);
    }

После нажатия кнопки, результат состоит в том, что 3 задачи добавляются все в третью группу, более конкретный результат был таким же, как если бы явыполнить этот код: tasksVisibili [2] .Add (task1);tasksVisibili [2] .Add (task2);tasksVisibili [2] .Добавить (task3);

Я делаю это неправильно?есть другой способ достичь моей цели?или это ошибка?

С уважением, Серхио

...