我有一个TvShowsViewModel
(1),其中包含ObservableCollection
的TvShowViewModel
s(2)。 A TvShowViewModel
包含SeasonViewModel
s(3)的ObservableCollection
。将ContextMenu命令绑定到父视图模型RelayCommand
我有一个TreeView
,它有TvShowsViewModel
(1)作为DataContext
。该TreeView
的ItemSource
结合TvShowViewModels
(0123)的ObservableCollection
。
TreeView
指定HierarchicalDataTemplate
,其结合ObservableCollection
的SeasonViewModels
(3)。
该HierarchicalDataTemplate
包含一个ContextMenu
。
现在,ContextMenu
包含一个Command
,我想要绑定到TvShowsViewModel
(1)中的RelayCommand
。
我尝试了各种各样的RelativeSource
绑定,但没有导致解决方案。我应该如何指定绑定?
TvShowsViewModel(1)
TvShowViewModel(2)
public class TvShowViewModel : ViewModelBase, IFolderOnDisk
{
public ObservableCollection<SeasonViewModel> Seasons
{
get { return _seasons; }
}
// Left out irrelevant code
}
SeasonViewModel(3)
public class SeasonViewModel : ViewModelBase, IFolderOnDisk
{
// Left out irrelevant code
}
汽提用户控件(树视图)
<!-- Again, left out a lot of irrelevant parts -->
<TreeView ItemsSource="{Binding TvShows}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="tvShows:TvShowViewModel" ItemsSource="{Binding Seasons}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate>
<TextBlock Text="{Binding Name}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem
Header="Exclude season"
<!-- This is where I need your help, how should I configure the binding? -->
Command="{Binding Path=DataContext.ExcludeSeasonCommand, RelativeSource={RelativeSource AncestorType=TreeView}}" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
的结合,这是我无法弄清楚
Thanks!保存了我的一些头发!请注意,您需要为TreeView指定一个名称作为x:Reference。 – pfeds 2017-08-28 06:17:41