![](/img/trans.png)
[英]x:Bind ViewModel RelayCommand to a command inside DataTemplate
[英]Bind ContextMenu Command to parents viewmodel RelayCommand
我有一個TvShowsViewModel
(1),其中包含一個ObservableCollection
的TvShowViewModel
(2)。 甲TvShowViewModel
包含ObservableCollection
的SeasonViewModel
S(3)。
我有一個TreeView
,它具有TvShowsViewModel
(1)作為DataContext
。 該TreeView
的ItemSource
綁定到TvShowViewModels
的ObservableCollection
(2)。
TreeView
指定一個HierarchicalDataTemplate
,該SeasonViewModels
綁定到SeasonViewModels
的ObservableCollection
(3)。
HierarchicalDataTemplate
包含一個ContextMenu
。
現在, ContextMenu
包含了Command
,我想綁定到RelayCommand
在TvShowsViewModel
(1)。
我嘗試了各種RelativeSource
綁定,但是沒有任何解決方案。 我應該如何指定綁定?
TvShowsViewModel(1)
public class TvShowsViewModel : ViewModelBase
{
public RelayCommand ExcludeSeasonCommand { get; private set; }
public ObservableCollection<TvShowViewModel> TvShows { get; private set; }
public TvShowsViewModel(ITvShowsLibrary tvShowsLibrary)
{
TvShows = new ObservableCollection<TvShowViewModel>();
ExcludeSeasonCommand = new RelayCommand(ExcludeSeasonCommandOnExecute, ExcludeSeasonCommandOnCanExecute);
// Left out irrelevant code
}
}
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
}
剝離的用戶控件(TreeView)
<!-- 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>
綁定,我不知道
最后,經過許多Google搜索之后,我遇到了解決方案
<MenuItem
Header="Exclude season"
Command="{Binding DataContext.ExcludeSeasonCommand, Source={x:Reference _tvShowsTreeView}}" />
因為HierarchicalDataTemplate沒有出現在視覺樹中,所以沒有“相對”源...
我希望這對其他正在拔頭發的人有所幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.