UWP Community Toolkit,Slidable ListView 删除列表项

UWP Community Tookit, SlidableListView remove list item

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

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

Now in the UWP Community Toolkit sample app, I find only XAML of the control but not the code file where I can find the event handler of the remove button in the control.

就在这里:

在官方示例中,ListView的项目来源使用ObservableCollection,而不是静态List,使用这个的好处是这是一个动态数据集合,当出现时会提供通知添加、删除项目或刷新整个列表时。因此,在此示例中,它只为 SlidableListItemRightCommand 绑定一个名为 DeleteItem 的委托命令,如下所示:

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 中删除项目,ListView 的相关 SlidableListItem 也会被删除。

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

  1. 将您的静态列表复制到 ObservableCollection 并将此 ObservableCollection 绑定到 ListViewItemsSource,在您的 SlidableListItem_RightCommandActivated事件删除静态列表和 ObservableCollection.

  2. 中的项目
  3. 为您的静态列表实现 INotifyPropertyCanged 接口。

顺便说一句,你可以在 SlidableListItem_RightCommandActivated 中获取刷过的项目,例如这样:

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

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