在UWP应用程序中通过拖放来传输复杂对象的好方法是什么?

本文关键字:对象 复杂 方法 是什么 传输 应用程序 UWP 拖放 | 更新日期: 2023-09-27 17:53:08

我的c#应用程序上有两个列表,其中list1列出所有对象,list2是这些对象的选择。我想启用拖放功能来选择对象。但我不能把这些对象放到DataView中。我怎么解决这个问题?

在UWP应用程序中通过拖放来传输复杂对象的好方法是什么?

我不知道你的对象类型的结构,但如果它有一些标识符,你可以使用它来存储在DataView。假设您有一个具有ID属性的MyClass对象列表,您可以将ID 's作为DataView的文本。

在拖动操作开始时,你可以这样做:

private void List1_DragItemsStarting(object sender, Windows.UI.Xaml.Controls.DragItemsStartingEventArgs e)
{
    var items = new StringBuilder();
    foreach (MyClass item in e.Items)
    {
        if (items.Length > 0) items.AppendLine();
        items.Append(item.ID);
    }
    e.Data.SetText(items.ToString());
    //As we want our Reference list to say intact, we only allow Copy
    e.Data.RequestedOperation = DataPackageOperation.Copy;
}

在删除选中项的处理程序中,您可以这样做:

private async void List2_Dropped(object sender, DragEventArgs e)
{
    if (e.DataView.Contains(StandardDataFormats.Text))
    {
        var def = e.GetDeferral();
        var s = await e.DataView.GetTextAsync();
        var ids = s.Split(''n');
        if (ids.Length > 0)
        {
            foreach (string id in ids)
            {
                // get the object for the ID here
            }
        }
        e.AcceptedOperation = DataPackageOperation.Copy;
        def.Complete();
    }
}

不是传递对象,而是传递ID。