/*
* ListViewBase(基类) - 列表控件基类(继承自 Selector, 请参见 /Controls/SelectionControl/SelectorDemo.xaml)
*
*
* DragItemsStartingEventArgs
* Items - 被拖动的 items 集合
* Cancel - 是否取消拖动操作
* Data - 一个 DataPackage 类型的对象,用于传递数据
*
* DragItemsCompletedEventArgs
* DropResult - drop 的结果(None, Copy, Move, Link)
* Items - 被拖动的 items 集合
*
*
* 注:
* 1、drag-drop 传递数据,剪切板传递数据,分享传递数据,以及其他场景的数据传递均通过 DataPackage 类型的对象来完成
* 2、本例通过一个私有字段传递数据,通过 DataPackage 传递数据请参见:/Controls/BaseControl/UIElementDemo/DragDropDemo.xaml
* 3、关于 UIElement 拖放的详细说明请参见:/Controls/BaseControl/UIElementDemo/DragDropDemo.xaml
*
*
* 本例用于演示如何在 ListViewBase 内拖动 item 以对 item 排序,以及如何拖动 item 到 ListViewBase 外的指定位置以删除 item,以及如何拖动一个 UIElement 到 ListViewBase 内以添加这个 item
*/
using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;
using System.Linq;
using Windows.UI.Xaml;
using System.Diagnostics;
using Windows10.Common;
using Windows.ApplicationModel.DataTransfer;
using System.Collections.Specialized;
using System;
using Windows.UI.Xaml.Input;
namespace Windows10.Controls.CollectionControl.ListViewBaseDemo
{
public sealed partial class ListViewBaseDemo2 : Page
{
// gridView1 的数据源
public ObservableCollection<Employee> Data1 { get; set; } = new ObservableCollection<Employee>(TestData.GetEmployees());
// gridView2 的数据源
public ObservableCollection<Employee> Data2 { get; set; } = new ObservableCollection<Employee>();
// lblEmployee 的数据源
public Employee Employee { get; set; } = new Employee() { Name = "wanglei", Age = 36, IsMale = true };
// 拖动中的 Employee 对象
private Employee _draggingEmployee;
public ListViewBaseDemo2()
{
this.InitializeComponent();
// 这个用来证明在 gridView1 中拖动 item 排序时,其结果会同步到数据源
Data1.CollectionChanged += Data1_CollectionChanged;
}
private void Data1_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += $"Action: {e.Action}, OldStartingIndex: {e.OldStartingIndex}, NewStartingIndex: {e.NewStartingIndex}";
}
// 开始 item 拖动
private void gridView_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
_draggingEmployee = e.Items.First() as Employee;
}
// 完成 item 拖动
private void gridView_DragItemsCompleted(ListViewBase sender, DragItemsCompletedEventArgs args)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += $"DropResult: {args.DropResult}";
_draggingEmployee = null;
}
// item 被拖进了 borderDelete
private void borderDelete_DragEnter(obje