bas*_*bas 1 c# data-binding wpf treeview parent
我有一个TvShowsViewModel(1)包含一个ObservableCollection的TvShowViewModelS(2).甲TvShowViewModel含有ObservableCollection的SeasonViewModelS(3).
我有一个TreeView,它有TvShowsViewModel(1)as DataContext.所述ItemSource的该TreeView结合所述ObservableCollection的TvShowViewModels(2).
在TreeView指定一个HierarchicalDataTemplate,其结合ObservableCollection的SeasonViewModels(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
}
}
Run Code Online (Sandbox Code Playgroud)
TvShowViewModel(2)
public class TvShowViewModel : ViewModelBase, IFolderOnDisk
{
public ObservableCollection<SeasonViewModel> Seasons
{
get { return _seasons; }
}
// Left out irrelevant code
}
Run Code Online (Sandbox Code Playgroud)
SeasonViewModel(3)
public class SeasonViewModel : ViewModelBase, IFolderOnDisk
{
// Left out irrelevant code
}
Run Code Online (Sandbox Code Playgroud)
剥离的用户控件(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>
Run Code Online (Sandbox Code Playgroud)
绑定,我无法弄清楚
最后,经过许多谷歌搜索,我遇到了解决方案
<MenuItem
Header="Exclude season"
Command="{Binding DataContext.ExcludeSeasonCommand, Source={x:Reference _tvShowsTreeView}}" />
Run Code Online (Sandbox Code Playgroud)
因为HierarchicalDataTemplate没有出现在可视化树中,所以没有"相对"源...
我希望这可以帮助其他人拉扯他/她的头发......
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |