代码之家  ›  专栏  ›  技术社区  ›  requenaxii

选中时,如何在行上显示和图像?

  •  0
  • requenaxii  · 技术社区  · 8 年前

    我的问题是,现在图标在列表的每个元素中都是可见的,我希望在默认情况下将它们设置为隐藏,并且当用户选择列表的任何元素时,显示它(当然,隐藏取消选择行的图标)。

    有什么要完成的提示吗?任何想法或提示都应该非常有用。

    以下是列表代码:

    <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>
    

    下面是我的ViewModel选择方法和项目来源:

        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;
                }
            }
        }
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   David Conlisk    8 年前

    我将使IsSelectedDeliveryInvisible成为DeliveryMethod类的一个属性,以便它可以为列表中的每个项目具有不同的值。

    当用户选择交付方法时,需要为列表中的每个项目设置IsSelectedDeliveryInvisible(请参阅下面的代码)。这将确保一次最多可以看到一个图标。您现有的绑定应该可以与此新代码一起使用。

    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); });
            }
        }
    }