2011-04-18 3 views
3

두 개의 메뉴 항목 요소 - 보완 된 가시성을 가진 "삭제 취소"및 "삭제": 하나가 보이면 다른 하나는 숨겨집니다. 뷰 모델의 코드에서두 요소의 가시성을 하나의 속성에 바인딩합니다.

내가 종속성 속성은 다음과 같이 정의 FilesSelectedCanBeUndeleted있다 : 당신은 가시성을 볼 수 있듯이

<MenuItem Header="Undelete" Command="{Binding UndeleteCommand }" 
Visibility="{Binding Path=FilesSelectedCanBeUndeleted, 
Converter={StaticResource BoolToVisConverter}}" > 

:

private bool _filesSelectedCanBeUndeleted; 
public bool FilesSelectedCanBeUndeleted 
{ 
    get 
    { 
     return _filesSelectedCanBeUndeleted; 
    } 
    set 
    { 
     _filesSelectedCanBeUndeleted = value; 
     OnPropertyChanged("FilesSelectedCanBeUndeleted"); 
    } 
} 

XAML을 삭제 취소 버튼은 다음과 같습니다 Undelete는 BooleanToVisibilityConveter의 도움으로 FilesSelectedCanBeUndeleted 속성에 바인딩됩니다.

내 질문은 FilesAelectedCanBeUndeleted 속성의 "NOT"값에 Delete 단추의 Visibility를 바인딩하는 XAML을 작성하는 방법입니다.

감사합니다,

답변

4

Here은 사용자 지정 IValueConverter의 예이며, 사용자가 시정 논리를 뒤집을 수 있습니다. 기본적으로 view-model 속성이 true 일 때 하나의 MenuItem이 표시되고 다른 하나는 축소됩니다.

그래서 당신과 같이 컨버터의 두 인스턴스를 정의 할 필요가 것 :

<local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
<local:BooleanToVisibilityConverter x:Key="ReversedBooleanToVisibilityConverter" IsReversed="true" /> 
1

당신의 ViewModel에 새 속성을 만들고 단지 'FilesSelectedCanBeUndeleted'무효 한 다음에 바인딩합니다.

+0

예, 그게 지금하고 있습니다. 그것은 작동하지만 다소 여분의 속성을 만들지 않고 돌아갈 수 있기를 바랍니다. 감사. – sean717

3

당신이처럼 viemodel의 다른 재산 피할 수 메뉴 항목에 datatrigger을 적용 할 수 있습니다 -

 <MenuItem Header="Delete" 
        Command="{Binding DeleteCommand }"> 
      <MenuItem.Style> 
       <Style TargetType="{x:Type MenuItem}"> 
        <Setter Property="Visibility" Value="Visible" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding FilesSelectedCanBeUndeleted}" Value="False"> 
          <Setter Property="Visibility" 
            Value="Collapsed" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </MenuItem.Style> 
     </MenuItem> 
0

나는 ... 단순한 부정과 얼마 전에 이런 짓을

private bool _filesSelectedCanBeUndeleted; 
public bool FilesSelectedCanBeUndeleted{  
     get{ 
      return _filesSelectedCanBeUndeleted;  
      } 
     set{   
      _filesSelectedCanBeUndeleted = value;   
      OnPropertyChanged("FilesSelectedCanBeUndeleted");  
      // You have also to notify that the second Prop will change 
      OnPropertyChanged("FilesSelectedCanBeDeleted");  
      }} 

public bool FilesSelectedCanBeDeleted{ 
     get{ 
      return !FilesSelectedCanBeUndeleted; 
     } 
     } 

Xaml은 다음처럼 보일 수 있습니다 ....

<MenuItem Header="Delete" 
    Command="{Binding DeleteCommand }" 
    Visibility="{Binding Path=FilesSelectedCanBeDeleted, Converter={StaticResource BoolToVisConverter}}" > 
관련 문제