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,使用这个的好处是这是一个动态数据集合,当出现时会提供通知添加、删除项目或刷新整个列表时。因此,在此示例中,它只为 SlidableListItem
的 RightCommand
绑定一个名为 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
可以在列表更改时得到通知,你可以:
将您的静态列表复制到 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;
}
如果你想要演示,可以发表评论。
我正在使用 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,使用这个的好处是这是一个动态数据集合,当出现时会提供通知添加、删除项目或刷新整个列表时。因此,在此示例中,它只为 SlidableListItem
的 RightCommand
绑定一个名为 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
可以在列表更改时得到通知,你可以:
将您的静态列表复制到
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;
}
如果你想要演示,可以发表评论。