Вы можете использовать привязку, чтобы изменить номер элемента SwipeControl на основе содержания модели, которое привязывается к свойству Textblock
Text
.
Вот образец, чтобы уточнить это:
В App.xaml добавьте ресурс SwipeItems
,
<Application.Resources>
<SymbolIconSource x:Key="AddIcon" Symbol="Add"/>
<SymbolIconSource x:Key="EditIcon" Symbol="Edit"/>
<SymbolIconSource x:Key="DeleteIcon" Symbol="Delete"/>
<SwipeItems x:Key="ThreeItems" Mode="Reveal">
<SwipeItem Text="Edit" IconSource="{StaticResource EditIcon}"/>
<SwipeItem Text="Delete" IconSource="{StaticResource DeleteIcon}"/>
<SwipeItem Text="Add" IconSource="{StaticResource AddIcon}"/>
</SwipeItems>
<SwipeItems x:Key="OneItem" Mode="Reveal">
<SwipeItem Text="Add" IconSource="{StaticResource AddIcon}"/>
</SwipeItems>
</Application.Resources>
Вот класс Model
, который связывается с элементом ListView:
public class Model
{
public string Content { get; set; }
public SwipeItems Swips
{
get
{
if (string.IsNullOrEmpty(Content))
{
return (SwipeItems)Application.Current.Resources["OneItem"];
}
else
{
return (SwipeItems)Application.Current.Resources["ThreeItems"];
}
}
}
}
В MainPage.xaml есть ListView,
<ListView x:Name="sampleList" ItemsSource="{x:Bind ListSource}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Model">
<SwipeControl x:Name="ListViewSwipeContainer"
LeftItems="{x:Bind Swips}"
Height="60">
<StackPanel Orientation="Vertical">
<TextBlock Text="{x:Bind Content}" FontSize="18"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Text Item details" FontSize="12"/>
</StackPanel>
</StackPanel>
</SwipeControl>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Это MainPage.xaml.cs,
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
ListSource = new ObservableCollection<Model>();
ListSource.Add(new Model { Content = "first" });
ListSource.Add(new Model { });
ListSource.Add(new Model { Content = "Second" });
ListSource.Add(new Model { Content = "Third" });
}
public ObservableCollection<Model> ListSource;
}
С другой стороны, вы также можете реализовать этот эффект, используя свойство ListView ItemTemplateSelector для ссылки на другое ListView ItemTemplate . Вам необходимо реализовать свой собственный DataTemplateSelector , чтобы возвращать соответствующую DataTemplate
базу в зависимости от того, является ли содержимое модели нулевым или пустым.