gpt4 book ai didi

silverlight - ListBoxDragDropTarget 不会重新排序使用继承的元素

转载 作者:行者123 更新时间:2023-12-04 03:13:52 24 4
gpt4 key购买 nike

我有一个非常奇怪的问题,我不知道如何调试它。 (旁注:我讨厌创建 GUI!无论如何...... :)

我一直在关注this在 Silverlight 上使用拖放操作的指南。
现在,我感兴趣的是列表中的重新排序。

如果我完全按照网站上的示例,一切都很好。它按预期工作。
但是,当我尝试用其他元素替换元素时,我不能再重新排序?!

考虑以下 XAML:

<toolkit:ListBoxDragDropTarget AllowDrop="True">
<ListBox Width="200" Height="500" x:Name="FromBox" DisplayMemberPath="Label">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</toolkit:ListBoxDragDropTarget>

除了此处为“标签”的 DisplayMemberPath 之外,这与我正在关注的文章中的相同。

在代码隐藏中,我现在执行以下操作:
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
FromBox.ItemsSource = GetElements();
}

public static ObservableCollection<Element> GetElements()
{
ObservableCollection<Element> Elements = new ObservableCollection<Element>();
var Label = new Label();
Label.Label = "Label me";
Elements.Add(Label);

var IntegerBox = new IntegerBox();
IntegerBox.Label = "Størrelsen på en gennemsnits svale:";
IntegerBox.Description = "cm";
Elements.Add(IntegerBox);

var TextBox = new TextBox();
TextBox.Label = "QTTextBox";
Elements.Add(TextBox);

return Elements;
}

(很抱歉在这一点中包含特殊的丹麦字符,但我认为显示我正在使用的确切代码比编辑它更好)

如您所见,我返回了一个元素的 ObservableCollection,每个元素都有一个 Label 属性(显然,它们都继承自 Element 类)。

对我来说,这应该可行 正是 与链接中提供的代码相同。
但事实并非如此。就好像我不能再丢弃元素一样!?

这是它在文章中的样子:

alt text

这就是我的元素的外观:

alt text

对可以重新排序的东西有一些要求吗?这篇文章使用了 Person-objects,但它们非常简单,并且没有实现任何进一步的接口(interface)。如您所见,我还确保使用正确类型的 ObservableCollection。难道只是因为它不能处理继承?!

......或者我只是愚蠢? :-)

提前致谢!

编辑:
我已将问题范围缩小到与继承有关。
以下代码也不能重新排序:
public class People
{
public static ObservableCollection<Person> GetListOfPeople()
{
ObservableCollection<Person> ppl = new ObservableCollection<Person>();
for (int i = 0; i < 15; i++)
{
if (i % 2 == 0)
{
SomePerson p = new SomePerson() { Firstname = "First " + i.ToString(), Lastname = "Last " + i.ToString() };
ppl.Add(p);
}
else
{
OtherPerson p = new OtherPerson() {Firstname = "First " + i.ToString(), Lastname = "Last " + i.ToString()};
ppl.Add(p);
}

}
return ppl;
}
}

public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public string FullName
{
get
{
return string.Concat(Firstname, " ", Lastname);
}
}
}
public class SomePerson : Person
{

}

public class OtherPerson : Person
{

}

怎么回事?!
看来您只能重新排序具有 的元素具体类型声明为 ObservableCollection 上的类型参数。因此,如果我声明它包含“Person”对象并混入 Person-objects 而不是 SomePerson 和 OtherPerson,我可以移动 那些 .

最佳答案

我有同样的问题,并做了更多的挖掘。这是我的解决方案:http://cjbhaines.wordpress.com/2011/07/09/silverlight-listboxdragdroptarget-why-cant-i-drop-it-there/

关于silverlight - ListBoxDragDropTarget 不会重新排序使用继承的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4076091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com