TreeViewItem не может обновить в BackgroundWorker - PullRequest
3 голосов
/ 26 октября 2011

У меня есть этот метод для обновления моего TreeView.Если я не использую BackgroundWorker, все работает нормально.Но если так, то мой TreeViewItem не обновляется, но меняется DataContex.Также это прекрасно работает: item.IsEnabled = false;

private void twSports_Expanded(object sender, RoutedEventArgs e)    
{       
TreeViewItem item = e.OriginalSource as TreeViewItem;
TreeLeaf leaf = item.DataContext as TreeLeaf;  var bgWorker = new BackgroundWorkerOnGrid(gridPartitions);
bgWorker.DoWork += delegate(object s, DoWorkEventArgs args)
{              
    if (leaf.Item != null)
    {
        if (leaf.Item.GetType() == typeof(SportType))
        {
            SportType sport = leaf.Item as SportType;
            args.Result = LoadSportPartitions(sport);
        }
        if (leaf.Item.GetType() == typeof(SportPartition))
        {
            SportPartition partition = leaf.Item as SportPartition;
            args.Result = LoadSportPartitions(partition);
        }
    }
};

bgWorker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
    List<SportPartition> partitions = args.Result as List<SportPartition>;

    if (partitions != null)
    {
        leaf.LoadChilds(partitions.ToArray());    //it doesn't work
        item.IsEnabled = false; //it works
    }

    (s as BackgroundWorkerOnGrid).Dispose();
};

bgWorker.RunWorkerAsync(leaf.Item);}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 ноября 2011
0 голосов
/ 07 ноября 2011

Я не уверен, что проблема более специфична WPF ; но если это так, то вот мои предложения:

Если вы использовали DataBinding, это может быть проблема с разрешением DataContext, ваш DataContext перезаписывается / заменяется другим значением. Пожалуйста, обратитесь к этим 2 ссылкам о том, как работает DataContext:

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx

http://msdn.microsoft.com/en-us/library/ms752347.aspx

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontextchanged.aspx

...