2014-10-06 98 views
1

我有一个TvShowsViewModel(1),其中包含ObservableCollectionTvShowViewModel s(2)。 A TvShowViewModel包含SeasonViewModel s(3)的ObservableCollection将ContextMenu命令绑定到父视图模型RelayCommand

我有一个TreeView,它有TvShowsViewModel(1)作为DataContext。该TreeViewItemSource结合TvShowViewModels(0123)的ObservableCollection

TreeView指定HierarchicalDataTemplate,其结合ObservableCollectionSeasonViewModels(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> 

的结合,这是我无法弄清楚

回答

5

最后,很多很多很多的谷歌搜索我跑进解决方案

<MenuItem 
    Header="Exclude season" 
    Command="{Binding DataContext.ExcludeSeasonCommand, Source={x:Reference _tvShowsTreeView}}" /> 

因为HierarchicalDataTemplate不会在视觉树出现后,有不是“相对”的来源...

我希望这可以帮助别人把他/她的头发拉出来......

+1

Thanks!保存了我的一些头发!请注意,您需要为TreeView指定一个名称作为x:Reference。 – pfeds 2017-08-28 06:17:41

相关问题