<Window> <!-- DataContext="HomeViewModel" -->
<ListBox ItemsSource="{Binding Discs}"> <!-- HomeViewModel.ObservableCollection<DiscViewModel> -->
<ListBox.ItemTemplate>
<DataTemplate>
<TreeView ItemsSource="{Binding Folders}"> <!-- DiscViewModel.IList<Folder> -->
<TreeView.ItemTemplate>
<DataTemplate>
<cc:TreeViewItemEx Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.GetFilesCommand}"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Window>
Я хочу выполнить GetFilesCommand
(определено DiscViewModel
), когда Folder
будет расширен. Для этого я расширил TreeViewItem
с Command
как DependencyProperty
и выполнил эту команду в OnExpanded
(переопределено). Это работает, но Command
имеет значение null. Причина указана в ошибке ниже:
Свойство «GetFilesCommand» не найдено в «объекте» «HomeViewModel» (HashCode=22799085)». BindingExpression:Path=DataContext.GetFilesCommand; DataItem='ListBox' (Имя=''); целевой элемент — 'TreeViewItemEx' (Name=''); целевое свойство — «Команда» (тип «ICommand»)
Я понимаю ошибку, но не знаю, как исправить этот XAML, чтобы он выбирал команду из DiscViewModel
, связанную с текущим элементом списка?