Мы используем элемент управления TreeView в MVV MVVM приложении WPF.Как вызвать фокус на TreeView из ViewModel
Я успешно добавил Развернуть/свернуть Все функции для просмотра - итерация всех элементов в TreeView, установка IsExpanded, а затем вызов Фокус на TreeView для обновления изменений.
Я также успешно добавил функциональность, чтобы очистить выбранный элемент в TreeView при щелчке пустого пространства в TreeView.
Моя текущая задача и проблема заключается в том, чтобы автоматически выбирать любые вновь добавленные элементы в TreeView. Свойства IsSelected и IsExpanded TreeViewItems привязаны к свойствам сопоставления в ViewModel, и установка IsSelected в ViewModel работает до тех пор, пока расширяется родительский узел.
Я попытался установить IsExpanded на родительский ViewModel, но насколько мне известно, мне нужно затем вызвать Focus на TreeView, чтобы заставить его обновлять и расширять свое представление дерева. Поскольку я в ViewModel, у меня нет связи с TreeView без нарушения MVVM.
Как это сделать?
Edit: Источник добавил для pushpraj
Элементы дерева сохраняются, как это:
private ObservableCollection<NodeViewModel> _children = new ObservableCollection<NodeViewModel>();
public ObservableCollection<NodeViewModel> Children
{
get { return _children; }
set
{
_children = value;
OnPropertyChanged("Children", this);
}
}
Дети свойство нашего корневого узла связано со свойством ItemsSource в TreeView. Дочерние узлы программно добавляются в свойство «Дети» корневого узла и друг друга.
Источник, с которым я работаю, не является моим собственным, и я не слишком опытен с WPF, поэтому, пожалуйста, простите меня, если я дам вам неправильную информацию. Я также заметил, что мы используем некоторые функции Drag/Drop в нашем TreeView от Gong Solutions. Может ли это быть причиной нашей проблемы? Установка IsExpanded в true в нашей ViewModel не расширяет запись в древовидном представлении.
Вы надеваете Не нужно фокусировать ни «TreeView», ни родительский «TreeViewItem», чтобы заставить «TreeView» обновляться. Если 'TreeViewItem.IsExpanded' привязан к соответствующему свойству модели представления, просто установите для этого свойства значение' true' и добавьте новый элемент в коллекцию модели родительского представления. Если эта коллекция реализует 'INotifyCollectionChanged' (например,' ObservableCollection 'does), вы увидите новый элемент в' TreeView'. –
Dennis
@Dennis 'IsExpanded' привязан к соответствующему свойству, я устанавливаю его в' true' перед добавлением нового элемента, а коллекция является 'ObservableCollection', но родительский элемент не расширяется. –