CollectionView не поддерживает изменения в своей исходной коллекции из потока, отличного от потока диспетчера - вызванного потоком диспетчера - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть ObservableCollection и ICollectionView, использующий OC в качестве источника:

private ObservableCollection<Comment> _Comments = new ObservableCollection<Comment>();
/// <summary>
/// Comments on the account
/// </summary>
[BsonElement("comments")]
public ObservableCollection<Comment> Comments
{
    get
    {
        return _Comments;
    }
    set
    {
        _Comments = value;
        OnPropertyChanged("Comments");
        OnPropertyChanged("CommentsSorted");
    }
}
private ICollectionView _CommentsSorted;
/// <summary>
/// Sorted list (reverse order) of the comments
/// </summary>
[BsonIgnore]
public ICollectionView CommentsSorted
{
    get
    {
        return _CommentsSorted;
    }
    set
    {
        _CommentsSorted = value;
        OnPropertyChanged("CommentsSorted");
    }
}

У меня есть команда, которая запускается:

obj.Comments.Add(new Comment(Message));

, где obj является экземпляромкласс, содержащий наблюдаемую коллекцию.

При вызове этой строки я сталкиваюсь со следующим исключением:

System.NotSupportedException: 'Этот тип CollectionView не поддерживает изменения его SourceCollection из потокаотличается от потока Dispatcher. '

Я открыл панель «Отладка> Windows> Потоки», и она работает в главном потоке.Я попытался поместить его в App.Current.Dispatcher.Invoke (...), не повезло.

Я не могу понять, почему это происходит.Чтобы сделать вещи более странными, я могу запустить это нормально, без проблем, на другом экземпляре того же класса, который был создан в одно и то же время (возвращен и создан вместе из моей базы данных в одном вызове).Первый я добавил комментарий без проблем, и все еще могу каждый раз, но все остальные, которые я попробовал, терпят неудачу.

...