Faf*_*fnr 4 silverlight silverlight-toolkit silverlight-4.0
我有一个非常奇怪的问题,我不知道如何调试它.(旁注:我讨厌创建GUI!无论如何...... :)
我一直在遵循本指南,在Silverlight上使用drag'n drop.现在,我感兴趣的是列表中的重新排序.
如果我完全按照网站上的例子,一切都很好.它按预期工作. 但是,当我尝试用其他东西替换元素时,我再也无法重新排序了?!
考虑以下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>
Run Code Online (Sandbox Code Playgroud)
除了DisplayMemberPath(此处为"Label")之外,这与我正在阅读的文章相同.
在代码隐藏中,我现在执行以下操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
(抱怨在这一点上包含特殊的丹麦字符,但我认为最好显示我使用的确切代码而不是编辑它)
如您所见,我返回一个元素的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
{
}
Run Code Online (Sandbox Code Playgroud)
WTF?看来你只能重新排序具有在ObservableCollection上声明为type-parameter 的特定类型的元素.因此,如果我声明它包含"Person"对象并混合Person-objects而不是SomePerson和OtherPerson,我可以移动它们.
我有同样的问题,并做了一点挖掘.继承人我的解决方案:http://cjbhaines.wordpress.com/2011/07/09/silverlight-listboxdragdroptarget-why-cant-i-drop-it-there/
归档时间: |
|
查看次数: |
2170 次 |
最近记录: |