【问题标题】:How can I show and image as on row when is selected?选择时如何在行上显示和图像?
【发布时间】:2018-04-07 03:25:20
【问题描述】:

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

这是我的 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;
            }
        }
    }

最好的!

【问题讨论】:

  • IsSelectedDeliveryIconVisible 在哪里?这是 VM 上的属性,还是 DeliveryMethod 上的属性?请记住,列表中的每个单元格都绑定到 DeliveryMethod 的一个实例。
  • 嗨@Jason,我更新了代码。 IsSelectedDeliveryIconVisible 是 VM 上的属性。

标签: c# xamarin.forms portable-class-library


【解决方案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); });
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2020-04-02
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    相关资源
    最近更新 更多