【问题标题】:UWP Community Tookit, SlidableListView remove list itemUWP Community Toolkit,Slidable ListView 移除列表项
【发布时间】:2016-09-24 19:52:03
【问题描述】:

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

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

【问题讨论】:

  • 对不起,我拼错了。我说的是SlidableListItem。谢谢

标签: c# xaml uwp uwp-xaml windows-community-toolkit


【解决方案1】:

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

就在这里:

在官方示例中,它使用ObservableCollection作为ListView的项目源,而不是静态List,使用它的好处是这是一个动态数据集合,它在添加、删除项目时提供通知,或者当整个列表被刷新时。所以,在这个示例中,它只为RightCommandRightCommand 绑定了一个名为DeleteItem 的delegateCommand,如下所示:

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. 为您的静态列表实现INotifyPropertyCanged 接口。

顺便说一下,你可以在SlidableListItem_RightCommandActivated中获取被刷过的物品,例如这样:

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

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

【讨论】:

  • 感谢您提供详细信息,实际上我将我的收藏从List 更改为ObservableCollection 我认为我不应该使用SlidableListItem_RightCommandRequested,而是使用您刚刚展示的DelegateCommand。但是在您的示例中,DelegateCommandItem 是什么?我的代码中没有。
猜你喜欢
  • 2019-02-04
  • 2021-09-23
  • 2019-03-02
  • 2022-12-01
  • 2019-03-14
  • 2022-08-04
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多