Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在UWP应用程序中,通过拖放传输复杂对象的好方法是什么?_C#_Uwp - Fatal编程技术网

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

C# 在UWP应用程序中,通过拖放传输复杂对象的好方法是什么?,c#,uwp,C#,Uwp,我的c#应用程序上有两个列表,其中列表1列出了所有对象,列表2是这些对象的选择。我想启用拖放来选择对象。但是我不能将这些对象放在DataView中。如何解决这个问题?我不知道对象类型的结构,但是如果它有一些标识符,您可以使用它存储在数据视图中。假设您有一个属性为ID的MyClass对象列表,您可以将ID作为文本放在DataView中 开始拖动操作时,可以执行以下操作: private void List1_DragItemsStarting(object sender, Windows.UI.X

我的c#应用程序上有两个列表,其中列表1列出了所有对象,列表2是这些对象的选择。我想启用拖放来选择对象。但是我不能将这些对象放在DataView中。如何解决这个问题?

我不知道对象类型的结构,但是如果它有一些标识符,您可以使用它存储在
数据视图中。假设您有一个属性为
ID
MyClass
对象列表,您可以将
ID
作为文本放在
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();
    }
}
在用于删除选定项目的处理程序中,可以执行以下操作:

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。希望这是针对您的情况的解决方案。

所有事情都从显示代码、进行谷歌搜索或解释错误和/或问题开始。。如果您不向我们表示欢迎来到StackOverflow,我们怎么知道您在做什么或不在做什么!请回顾如何提出一个好问题,因为这个问题质量很低,不符合最低发布标准。谢谢