Беа утверждает, что использование CollectionViewSource.GetDefaultView()
является ее любимым способом доступа к представлению данной коллекции.Кроме того, лично я никогда не сталкивался с какими-либо проблемами, связанными с использованием CollectionViewSource.GetDefaultView()
, однако это, безусловно, возможно в данном сценарии.
Вы должны понимать, что каждая коллекция имеет представление по умолчаниюи что, когда вы связываете заданное свойство с заданной коллекцией, WPF автоматически оборачивает коллекцию представлением и связывается с представлением;не коллекция.
Так как это является частью инфраструктуры WPF, вы должны предположить, что с каждой коллекцией, имеющей связанное с ней представление, она будет затем удалена при утилизации коллекции.Если есть ссылка на коллекцию через связываемое свойство, то существует связанное представление, ссылающееся на коллекцию, независимо от того, делаете ли вы вызов CollectionViewSource.GetDefaultView()
или нет, поэтому вы все равно будете в том же положении.
Эмпирическое свидетельство существует, что до тех пор, пока коллекция не выйдет из области видимости, связанные представления не будут GC'ed;однако имейте в виду, что это имеет дело с коллекцией с орудиями INotifyCollectionChanged
.
Исходя из ваших обстоятельств, может существовать связь 1: 1 между коллекцией и ассоциированным представлением, и, следовательно, соединение может не создавать никаких помех.В этом сценарии представление о том, что GC'ed после того, как коллекция вышла из области видимости, не является проблемой.
Это сводится к тому, чтобы действовать осторожно и быть уверенным, что вы знаете, что происходит под прикрытием, для болеесложные ситуации, чтобы вы могли принять соответствующие меры.