2016-11-18 59 views
0

我在ResourceDictionary中有ContextMenuContextMenu應根據視圖模型屬性的值隱藏或顯示,但不起作用。ResourceDictionary中的綁定不起作用

這是我的XAML代碼(ControlBaseUserControl導出):

<control1:ControlBase> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <HierarchicalDataTemplate ItemsSource="{Binding InfraNetworkItems}"> 
       <StackPanel> 
        <StackPanel.ContextMenu> 
         <ContextMenu DataContext="{Binding PlacementTarget.DataContext, 
             RelativeSource={RelativeSource Self}}"> 
          <MenuItem Header="Delete" 
             Visibility="{Binding 
              DataContext.MyViewModel.DeleteEnabled, 
              RelativeSource={RelativeSource Mode=FindAncestor, 
               AncestorType=control1:ControlBase}, 
              Converter={StaticResource 
               BooleanVisibilityConverter}}" /> 
         </ContextMenu> 
        </StackPanel.ContextMenu> 
       </StackPanel> 
      </HierarchicalDataTemplate> 
     </ResourceDictionary> 
    </UserControl.Resources> 
</control1:ControlBase> 

DeleteEnabled是上視圖模型一個bool屬性。


我解決這個問題的早期嘗試都是基於這個假設:

ContextMenuHierarchicalDataTemplate它具有ItemsSource集內。我的房產不是這個ItemSource的會員,它屬於視圖模型。因此,我已經試過這行代碼,但沒有任何效果:

Visibility="{Binding DataContext.MyViewModel.DeleteEnabled, 
    RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase}, 
    Converter={StaticResource BooleanVisibilityConverter}}" 

但是,如果我從視圖模型複製DeleteEnabled屬性設置爲ItemSource對象,它的工作原理:

Visibility="{Binding DeleteEnabled, Converter={StaticResource BooleanVisibilityConverter}}" 

回答

1

什麼是你的觀點的DataContext?如果它是MyViewModel的實例,則必須更改綁定的路徑。 請試試這個:

<Visibility="{Binding DataContext.DeleteEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase}, Converter={StaticResource BooleanVisibilityConverter}}" /> 

隨着路徑設置的DataContext你已經可以訪問您的視圖模型,當然到DeleteEnabled屬性。 希望這有助於。