2017-10-25 13 views
0

저는 Xamarin.Forms에서 새롭고 TableView에서 선택된 항목으로 선택된 표시기로 표시하고 아이콘을 표시하려고 시도하지만 실제로는 약간 손실됩니다 ...행을 선택하면 어떻게 표시하고 이미지를 만들 수 있습니까?

내 문제는 바로 지금입니다. 아이콘은 목록의 각 요소에 표시되며 기본적으로 숨김으로 설정하고 사용자가 목록의 요소를 선택하면 표시합니다 (물론 선택 취소 된 행의 아이콘을 숨길 수 있음).

어떤 힌트를 얻으시겠습니까? 어떤 아이디어 나 힌트라도 도움이 될 것입니다.

여기 목록 코드 :

<base:ListView 
        ItemsSource="{Binding DeliveryMethodList}" 
        HorizontalOptions="FillAndExpand" 
        VerticalOptions="FillAndExpand" 
        RowHeight="60" 
        HeightRequest="120" 
        BackgroundColor="Transparent" 
        IsPullToRefreshEnabled="false" 
        SeparatorVisibility="None" 
        SelectedItem="{Binding SelectedDeliveryMethod}"> 

        <base:ListView.ItemTemplate> 
         <DataTemplate> 
          <ViewCell> 
          <StackLayout 
            Orientation="Horizontal" 
            HorizontalOptions="FillAndExpand" 
            VerticalOptions="CenterAndExpand"> 
            <base:Image 
             HeightRequest="{base:PointSize 15}" 
             WidthRequest="{base:PointSize 15}" 
             Source="{x:Static res:Images.AcceptIco}" 
             IsVisible="{Binding IsSelectedDeliveryIconVisible}" 
             VerticalOptions="Center" 
             HorizontalOptions="Center"/> 

            <base:Label 
             FontSize="{StaticResource FontSizeMedium1}" 
             Text="{Binding name}" 
             HorizontalOptions="Center" 
             VerticalOptions="Start" 
             TextColor="White"/> 
          </StackLayout> 
          </ViewCell> 
         </DataTemplate> 
        </base:ListView.ItemTemplate> 
       </base:ListView> 

여기에 선택과 항목 소스에 내 뷰 모델 방법입니다 :

bool _isSelectedDeliveryIconVisible; 
    public bool IsSelectedDeliveryIconVisible 
    { 
     get { return _isSelectedDeliveryIconVisible; } 
     set { SetProperty(ref _isSelectedDeliveryIconVisible, value); } 
    } 

    ObservableCollection<DeliveryMethod> _deliveryMethodList; 
    public ObservableCollection<DeliveryMethod> DeliveryMethodList 
    { 
     get { return _deliveryMethodList; } 
     set { SetProperty(ref _deliveryMethodList, value); } 
    } 

    DeliveryMethod _selectedDeliveryMethod; 
    public DeliveryMethod SelectedDeliveryMethod 
    { 
     get { return _selectedDeliveryMethod; } 
     set 
     { 
      SetProperty(ref _selectedDeliveryMethod, value); 
      if (_selectedDeliveryMethod != null) 
      { 
       IsSelectedDeliveryIconVisible = true; 
      } 
     } 
    } 

최고!

+0

어디에서 IsSelectedDeliveryIconVisible입니까? VM이나 DeliveryMethod의 속성입니까? 목록의 각 셀은 DeliveryMethod 인스턴스에 바인딩되어 있습니다. – Jason

+0

안녕하세요 @ 제이슨, 코드를 업데이트했습니다. IsSelectedDeliveryIconVisible은 VM의 속성입니다. – requenaxii

답변

1

IsSelectedDeliveryIconVisible을 DeliveryMethod 클래스의 특성으로 만들면 목록의 각 항목마다 다른 값을 가질 수 있습니다.

사용자가 전달 방법을 선택하면 목록의 각 항목에 대해 IsSelectedDeliveryIconVisible을 설정해야합니다 (아래 코드 참조). 그러면 한 번에 하나의 아이콘 만 표시됩니다. 기존 바인딩은이 새로운 코드와 함께 작동해야합니다.

public class DeliveryMethod 
{ 
    public int Id {get; set;} 
    public bool IsSelectedDeliveryIconVisible {get; set;} 
    // ... 
} 

DeliveryMethod _selectedDeliveryMethod; 
public DeliveryMethod SelectedDeliveryMethod 
{ 
    get { return _selectedDeliveryMethod; } 
    set 
    { 
     SetProperty(ref _selectedDeliveryMethod, value); 
     if (_selectedDeliveryMethod != null) 
     { 
      DeliveryMethodList.ForEach(d => { d.IsSelectedDeliveryIconVisible = (d.Id == value.Id); }); 
     } 
    } 
} 
+0

감사! 나를 위해 완벽하게 작동합니다! – requenaxii