现在在 UWP 社区工具包示例应用程序中,我只找到了控件的 XAML,但没有找到可以在控件中找到删除按钮的事件处理程序的代码文件。
就在这里:
在官方示例中,它使用ObservableCollection作为ListView的项目源,而不是静态List,使用它的好处是这是一个动态数据集合,它在添加、删除项目时提供通知,或者当整个列表被刷新时。所以,在这个示例中,它只为RightCommand 的RightCommand 绑定了一个名为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 在列表更改时可以得到通知,您可以:
将您的静态列表复制到ObservableCollection 并将此ObservableCollection 绑定到ListView 的ItemsSource,在您的SlidableListItem_RightCommandActivated 事件中删除静态列表和ObservableCollection 中的项目.
为您的静态列表实现INotifyPropertyCanged 接口。
顺便说一下,你可以在SlidableListItem_RightCommandActivated中获取被刷过的物品,例如这样:
private void SlidableListItem_RightCommandRequested(object sender, System.EventArgs e)
{
var slidableitem = sender as SlidableListItem;
var item = slidableitem.DataContext as Item;
}
如果您想要演示,可以发表评论。