0

我正在使用 UWP Community Toolkit 的SlidableListItem控件。我在列表视图中有一些静态列表内容。现在在 UWP Community Toolkit 示例应用程序中,我只找到了控件的 XAML,但没有找到可以在控件中找到删除按钮的事件处理程序的代码文件。我想在代码文件中编写一个事件,RightCommandRequested="SlidableListItem_RightCommandActivated"以便我可以删除列表视图中的那些静态项目。

删除列表项的正常代码在ListView这里不起作用。请问有人知道事件处理程序的代码吗?

4

1 回答 1

2

现在在 UWP Community Toolkit 示例应用程序中,我只找到了控件的 XAML,但没有找到可以在控件中找到删除按钮的事件处理程序的代码文件。

它就在这里:

在此处输入图像描述

在官方示例中,它ObservableCollection用于 的项目源ListView,而不是静态列表,使用它的优点是这是一个动态数据集合,它在添加、删除或刷新整个列表时提供通知。因此,在这个示例中,它只绑定了一个名为of的 delegateCommand DeleteItem,如下所示:RightCommandSlidableListItem

RightCommand="{Binding DeleteItem, ElementName=Page, Mode=OneWay}"

在后面的代码中:

private DelegateCommand<Item> _deleteItem = default(DelegateCommand<Item>);

public DelegateCommand<Item> DeleteItem => _deleteItem ?? (_deleteItem = new DelegateCommand<Item>(ExecuteDeleteItemCommand, CanExecuteDeleteItemCommand));

...
private bool CanExecuteDeleteItemCommand(Item item)
{
    return true;
}

private void ExecuteDeleteItemCommand(Item item)
{
    _items.Remove(item);
}

正如您在此处看到的,它仅从 中删除项目ObservableCollection,相关SlidableListItemListView也将被删除。

现在到了你的问题,如果你想使用RightCommandRequested="SlidableListItem_RightCommandActivated",没关系,SlidableListItem_RightCommandActivated当你从右向左滑动时会触发。问题是您的项目来源,它是一个静态列表,以确保您ListView可以在列表更改时收到通知,您可以:

  1. 将您的静态列表复制到 aObservableCollection并将其绑定ObservableCollectionItemsSourceof ListView,在您的SlidableListItem_RightCommandActivated事件中删除静态列表和ObservableCollection.

  2. INotifyPropertyCanged为您的静态列表实现接口。

顺便说一句,您可以SlidableListItem_RightCommandActivated像这样获取示例中的刷过项目:

private void SlidableListItem_RightCommandRequested(object sender, System.EventArgs e)
{
    var slidableitem = sender as SlidableListItem;
    var item = slidableitem.DataContext as Item;
}

如果您想要演示,可以发表评论。

于 2016-09-27T08:41:19.977 回答