选中时如何在行上显示和成像?
How can I show and image as on row when is selected?
我是 Xamarin.Forms 的新手,我正在尝试将图标作为 selected 指示器显示到 TableView 上的 selected 项目中,但实际上我是小失落...
我的问题是,现在图标在列表的每个元素中都是可见的,我想将它们默认设置为隐藏,并且当用户 select 列表的任何元素时,显示它(并且当然,隐藏 deselected 行的图标)。
有什么提示可以完成吗?任何想法或提示都应该非常有帮助。
列表代码如下:
<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>
这里是我的 selection 和项目来源的 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 成为 DeliveryMethod class 的一个属性,这样列表中的每一项都可以有不同的值。
当用户选择交付方式时,您需要为列表中的每个项目设置 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); });
}
}
}
我是 Xamarin.Forms 的新手,我正在尝试将图标作为 selected 指示器显示到 TableView 上的 selected 项目中,但实际上我是小失落...
我的问题是,现在图标在列表的每个元素中都是可见的,我想将它们默认设置为隐藏,并且当用户 select 列表的任何元素时,显示它(并且当然,隐藏 deselected 行的图标)。
有什么提示可以完成吗?任何想法或提示都应该非常有帮助。
列表代码如下:
<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>
这里是我的 selection 和项目来源的 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 成为 DeliveryMethod class 的一个属性,这样列表中的每一项都可以有不同的值。
当用户选择交付方式时,您需要为列表中的每个项目设置 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); });
}
}
}