2017-08-07 170 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