【发布时间】:2025-12-03 01:15:01
【问题描述】:
我有一个非常奇怪的问题,我不知道如何调试它。 (旁注:我讨厌创建 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 类)。
对我来说,这应该完全与链接中提供的代码相同。 但事实并非如此。好像不能再丢东西了!?
这是它在文章中的样子:
这就是我的元素的外观:
对可以重新排序的东西有一些要求吗?这篇文章使用了 Person-objects,但它们非常简单,并且没有实现任何进一步的接口。如您所见,我还确保使用正确类型的 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
{
}
WTF?! 看来您只能重新排序将 specific 类型声明为 ObservableCollection 上的类型参数的元素。因此,如果我声明它包含“Person”对象并混入 Person-objects 而不是 SomePerson 和 OtherPerson,我可以移动 那些。
【问题讨论】:
-
您好 Fafnr,我也遇到了这个问题,我想知道您是否对此有任何解决方案。谢谢你,阿迪
-
我很抱歉,但我没有... :/ 请参阅下面 SynerCoder 的答案!我已经在 codeplex 上注册以支持那里的问题,看看他们怎么说。
标签: silverlight silverlight-4.0 silverlight-toolkit