2016-11-18 11 views
0

ResourceDictionaryContextMenuがあります。 ContextMenuは、ビューモデルプロパティの値に応じて非表示または表示する必要がありますが、機能しません。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プロパティです。問題を解決するための


私の以前の試みは、この仮定に基づいています。

ContextMenuItemsSourceセットを持っていHierarchicalDataTemplateの内側にあります。私の財産はこのItemSourceのメンバーではなく、ビューモデルに属します。したがって、私は、このコード行を試してみたが、何の効果なし:私はItemSourceオブジェクトにビューモデルからDeleteEnabledプロパティをコピーする場合

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

しかし、それは動作します:

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

答えて

1

何ビューのDataContextですか? MyViewModelのインスタンスの場合は、バインディングのパスを変更する必要があります。あなたはすでにあなたのviewmodelに、そしてもちろんのDeleteEnabled・プロパティへのアクセス権を持っているのDataContextへのパスを設定して

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

: 、このいずれかを試してみてください。 これが役立つことを願っています。

関連する問題