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