2014-12-15 2 views
8

버튼이 두 개 있습니다. 버튼 A & 버튼 B. 처음에는 모두 숨겨져 있습니다. 데이터는 Observable Collection OCollection에서 가져옵니다.XAML, WP 8.1에서 DataTrigger Behavior를 사용하여 두 개의 버튼의 가시성을 전환하는 방법은 무엇입니까?

이것은 내가 acheive하려고 무엇을 :

1) 처음 두 버튼이 숨겨져 있습니다. 버튼 A가 가시화되어야한다) 모든 목록보기 항목을 클릭 첫 번째 클릭 (에

2) (완료).

3) 버튼 A가 볼 유지되어있는 것 이외의 다른리스트 뷰 항목) 클릭 클릭 (의 나머지 는, 버튼 B가 가시화되어야한다 (완료). 그리고 버튼 A의 가시성은 다시 축소로 변경되어서는 안됩니다.

NB : 각 목록보기 항목에는 하나의 단추 (단추 A 또는 단추 B) 만 있어야합니다.

OCollection은 ListView의 ItemSource로 설정됩니다. 각 ListView Item은 기본 이미지가 포함 된 표입니다.

XAML :

 <ListView Name="lv" 
       ItemsSource="{Binding OCollection}" 
       Background="Linen"     
       Grid.ColumnSpan="3"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="LightGray" Name="buttonGrid" Tag="{Binding dumyString}"> 
        <i:Interaction.Behaviors> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="Equal"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Visible" /> 
         </ic:DataTriggerBehavior> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="NotEqual"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Collapsed" /> 
         </ic:DataTriggerBehavior> 
         <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=buttonGrid.Tag}" Value="{Binding dumyString}" ComparisonCondition="Equal"> 
          <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonB}" PropertyName="Visibility" Value="Visible" /> 
         </ic:DataTriggerBehavior>        
        </i:Interaction.Behaviors> 

        <Image Source="/Assets/Logo.png" /> 
        <Button Name="ButtonA" Content="ButtonA" Background="Black" Visibility="Collapsed" /> 
        <Button Name="ButtonB" Content="ButtonB" Background="Black" Visibility="Collapsed" /> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

내가 버튼을 내용으로 그리드의 태그를 비교하고, 3 acheive합니다. 논리가 잘못되어 작동하지 않습니다. 자, 코드를 사용하지 않고 어떻게 이것을 달성 할 수 있을까요? 나는 MVVM 패턴을 따르고 있으므로 코드는 뒤에있다.

내가 초보자이기 때문에 샘플이 좋을 것입니다.

등급 :

public class dumyClass 
{ 
    public string dumyString { get; set; } 
} 

답변

1

난 당신이 재산을 bool에 당신의 재산의 값을 변경하여 이벤트를 처리하기 위해 다음 당신의 버튼의 가시성 결박, 당신의 ViewModel에 CollectionChanged 이벤트를 구독 할 수 있다고 생각합니다. BooleanToVisibility 변환기를 잊지 마라. 필요한 경우 코드 예제를 제공 할 수 있습니다. 여기

그것의 :

public FooViewModel() 
    { 
     this.OCollection += this.OCollectionChanged; 
    } 

    private void OCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     var collection = sender as System.Collections.Generic.List<Bar>; 
     if (collection != null && collection.Count > 1) 
     { 
      this.IsButtonVisible = true; 
      base.RaisePropertyChanged(() => this.IsButtonVisible); 
     } 
    } 

당신이 MVVM을 사용하는 경우, 난 당신이 RaisePropertyChanged의 의미가 무엇인지 희망 당신은 재산을 bool에 버튼의 가시성을 결합하는 방법을 알고있다. 당신이 이해할 수없는 일이 있으면 알려주세요.

+0

@ w-d 내 게시물에 코드를 추가하고 시도해보고 어떻게 진행되는지 알려주세요. – RenDishen

관련 문제