2017-08-07 367 views
1

我有一个视图(在MVVM中)有一些控件包括树视图。 ViewModel是数据上下文和模型,一切工作都很好,直到现在。 **我有两种情况: **视图控件显示/隐藏WPF MVVM

  1. 我希望我的视图显示一个ContextMenu对Treeview项目。
  2. 其他情况下,不应该对树视图项显示文本菜单

这可能与一个视图或应该有这个目的两种不同的看法,我个人的工作,如果我会更好有一个视图。

虚拟机和模型非常简单,只是具有视图的绑定属性。

View.xaml

<UserControl x:Class="SPM.SystemExplorer.View.SystemExplorerView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:SPM.SystemExplorer.View" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
     xmlns:viewModel="clr-namespace:SPM.SystemExplorer.ViewModel" 
     xmlns:classes="clr-namespace:SPM.SystemExplorer.Classes"> 
<UserControl.DataContext> 
    <viewModel:SystemExplorerViewVM></viewModel:SystemExplorerViewVM> 
</UserControl.DataContext> 
<Grid> 
    <StackPanel> 
     <Label Content="{Binding Test}"></Label> 
     <TreeView Grid.Row="1" ItemsSource="{Binding SystemProjects}"> 
      <TreeView.Resources> 
       <HierarchicalDataTemplate DataType="{x:Type classes:SystemProject}" ItemsSource="{Binding ParticipantProjects}"> 
        <StackPanel Orientation="Horizontal"> 
         <TreeViewItem Header="{Binding NameOfSystemProject}"></TreeViewItem> 
         <TreeViewItem Header="{Binding AuthorOfSystemProject}"></TreeViewItem> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type classes:ParticipantProject}"> 
        <StackPanel Orientation="Horizontal"> 
         <TreeViewItem Header="{Binding NameOfParticipantProject}"></TreeViewItem> 
         <TreeViewItem Header="{Binding AuthorOfParticipantProject}"></TreeViewItem> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.Resources> 
     </TreeView> 
    </StackPanel> 
</Grid> 

+0

您可以设置SystemExplorerViewVM以“A”或“B”的属性和使用数据触发。 – mm8

+0

请给我一个例子,写几行它,我是WPF的初学者。 – Smallestearth

+0

我想我没有解释正确的, 我想说的是: 其实我有两种情况为我的看法。首先,如果我右击它,我想看到我的视图在树视图项上有一个contextmenu。第二种情况,我在树视图项目上有相同的视图,但没有上下文菜单。 – Smallestearth

回答

1

你可以一个属性(ShowContextMenu)添加到您设置为true/false这取决于你是否要显示ContextMenuSystemExplorerViewVM类。然后,您可以在您的XAML使用与DataTrigger一个Style

<TreeView Grid.Row="1" ItemsSource="{Binding SystemProjects}"> 
    <TreeView.Resources> 
     <ContextMenu x:Key="cm"> 
      <MenuItem Header="1" /> 
      <MenuItem Header="2" /> 
     </ContextMenu> 
     <Style TargetType="TreeViewItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding DataContext.ShowContextMenu, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="True"> 
        <Setter Property="ContextMenu" Value="{StaticResource cm}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
     <HierarchicalDataTemplate DataType="{x:Type classes:SystemProject}" ItemsSource="{Binding ParticipantProjects}"> 
      <StackPanel Orientation="Horizontal"> 
       <TreeViewItem Header="{Binding NameOfSystemProject}"></TreeViewItem> 
       <TreeViewItem Header="{Binding AuthorOfSystemProject}"></TreeViewItem> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type classes:ParticipantProject}"> 
      <StackPanel Orientation="Horizontal"> 
       <TreeViewItem Header="{Binding NameOfParticipantProject}"></TreeViewItem> 
       <TreeViewItem Header="{Binding AuthorOfParticipantProject}"></TreeViewItem> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
    </TreeView> 
+0

我在datatrigger绑定中遇到了一些绑定错误,我正在尝试修复它。 – Smallestearth

+0

我有这个错误,并坚持在这一点上。 BindingExpression path error:'ShowContextMenu'property not found on'object'''TreeViewItem'(Name ='')'。 BindingExpression:路径= ShowContextMenu; DataItem ='TreeViewItem'(Name ='');目标元素是'TreeViewItem'(Name ='');目标属性是'NoTarget'(键入'Object') – Smallestearth

+0

对不起,它应该是绑定DataContext.ShowContextMenu ...还要确保将属性添加到SystemExplorerViewVM类。 – mm8