2011-10-16 2 views
3

내 사용자 정의 컨텍스트 메뉴 가시성은 종속성 속성을 바인딩 할 수 없습니다. 어떤 생각? 내가 가시성 = "숨겨진"나를 위해 작동 설정하면WPF UserControl 컨텍스트 메뉴 가시성 바인딩

여기 내 WPF 코드

<UserControl.ContextMenu> 
    <ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}"> 
    <MenuItem Command="local:GCommands.Edit" /> 
    <MenuItem Command="local:GCommands.Delete" /> 
    <MenuItem Command="local:GCommands.ExportFcsFiles" /> 
    <MenuItem Command="local:GCommands.BatchExportStatistics" /> 
    <Separator/> 
    <MenuItem Command="local:GCommands.SaveAs" Header="Save As..." /> 
    </ContextMenu> 
</UserControl.ContextMenu> 

입니다. 이 같은 :

<ContextMenu Visibility="Hidden"/> 

를 사용하는 경우이는 "나는 = 확신 가시성을 해요

<ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}"> 

작동하지 않습니다 {바인딩 ElementName을 = wellControl, 경로 = IsInCompactMode, 컨버터 = {정적 리소스 BooleanToVisibilityConverter} } "문제가 없다. 다른 사람들에게도 효과가있다.

여기 내 종속성 속성

나는이 방법을 시도
public bool IsInCompactMode 
     { 
      get {return (bool)GetValue(IsInCompactModeProperty); } 
      set {SetValue(IsInCompactModeProperty, value); } 
     } 
     public static readonly DependencyProperty IsInCompactModeProperty = 
      DependencyProperty.Register("IsInCompactMode", typeof(bool), typeof(WellControl), new PropertyMetadata(false)); 

, 그것은 작동하지 않습니다 아직도 것, 이것은 정말 이상한입니다!

<ContextMenu x:Name="menu" IsOpen="{Binding ElementName=wellControl, Path=IsInCompactMode}"> 

정말 혼란 스럽습니다. 무엇이 잘못 되었나요? "Binding ElementName = wellControl, Path = IsInCompactMode"는 사용자 정의 컨트롤의 다른 부분에서 작동하지만 이상한 컨텍스트 메뉴에서는 작동하지 않습니다. 그것은 의미가 없습니다.

+1

왜하지? 무슨 일이야? 너 뭐하려고? – SLaks

+1

정보 의이 금액을 아무도 당신을 도울 수있을 것입니다 ... – Dennis

+0

죄송합니다 얘들 아, 내 핸드폰에 의해 게시 더 많은 정보를 추가 할 수 없습니다. – CodingTT

답변

8

1> ContextMenu, Popups, DataGridColumns는 시각적 트리의 일부가 아닙니다. 따라서 ElementName 또는 RelativeSource을 사용하는 바인딩은 이와 같이 작동하지 않습니다.

2>특정 상황에서 컨텍스트 메뉴를 표시하지 않으려면 트리거를 사용하여 컨텍스트 메뉴를 시각적으로 설정 해제하십시오. 바인딩 작품, 우리는 프록시 요소 방법을 사용하도록

 <TextBlock Text="ContextMenu is not shown when DataContext.IsShow is false"}"> 
      <TextBlock.Style> 
       <Style TargetType="{x:Type TextBlock}"> 
        <Setter Property="ContextMenu" 
          Value="{StaticResource TextBlockContextMenu}" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsShow}" 
            Value="False"> 
          <Setter Property="ContextMenu" 
            Value="{x:Null}" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
     </TextBlock> 

3>

Bind datagrid column visibility MVVM

내가 두 번째 단계를 선호 ..., 시각적 트리에 이러한 항목을 첨부합니다.

0

상황에 맞는 메뉴를 표시/숨기려면 Visibility 속성이 아닌 ContextMenu 속성 인 IsOpen을 사용해야합니다.

+0

하지만이 방법은 여전히 ​​작동하지 않습니다. CodingTT

-1

업데이트 트리거 추가해야합니다 : "UpdateSourceTrigger =하여 PropertyChanged"

<DataGrid.ContextMenu > 
    <ContextMenu Visibility="{Binding IsSelectionEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource BooleanToVisibilityConverter}}" > 
     <ContextMenu.Items> 
      <MenuItem Header="Create Layer" Command="{Binding DefineLayerName }" /> 
     </ContextMenu.Items> 
    </ContextMenu> 
</DataGrid.ContextMenu>