Проблема, вероятно, в цикле foreach
.Каждый раз, когда вы добавляете объект, вызывается событие CollectionChanged
и дерево перестраивается.
Вы не хотите использовать ObservableCollection
, если все, что вы делаете, это очистите весь список и замените его новымво-первых, используйте List
и запустите событие PropertyChanged
, как только данные будут полностью загружены.
, то есть просто выполните привязку к такому свойству (требуется реализация INotifyPropertyChanged
):
private IEnumerable<HierarchyViewModel> _hierarchy = null;
public IEnumerable<HierarchyViewModel> Hierarchy
{
get { return _hierarchy; }
set
{
if (_hierarchy != value)
{
_hierarchy = value;
NotifyPropertyChanged("Hierarchy");
}
}
}
Если установить это свойство, привязки будут уведомляться.Здесь я использую интерфейс IEnumerable
, поэтому никто не пытается просто добавить к нему элементы (которые не будут замечены привязкой).Но это всего лишь одно предложение, которое может работать или не работать для вашего конкретного сценария.
( Также см. Хороший комментарий Sixlettervariable )
Просто примечание, этот код:
public ObservableCollection<HierarchyViewModel> Hierarchy
{
get { return _hierarchy; }
set { _hierarchy = value; }
}
- это плохо, вы можете перезаписать список, и привязка прекратится, потому что в установщике не сработало событие PropertyChanged .
Если вы используете ObservableCollection, он обычно используется так:
private readonly ObservableCollection<HierarchyViewModel> _hierarchy =
new ObservableCollection<HierarchyViewModel>();
public ObservableCollection<HierarchyViewModel> Hierarchy
{
get { return _hierarchy; }
}