У меня очень странная проблема, и я не знаю, как ее отладить.(Примечание: я ненавижу создавать GUI! В любом случае ...:)
Я следовал этому руководству по использованию перетаскивания в 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который здесь "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;
}
(Извинения за то, что яспециальные датские символы в этом бите, но я подумал, что лучше показать точный код, который я использую, чем редактировать его)
Как вы видите, я возвращаю ObservableCollection of Element, каждый из которых имеетСвойство метки (и все они, очевидно, наследуются от класса Element).
Для меня это должно работать точно так же, как код, указанный в ссылке.Но это не так.Как будто я больше не могу отбрасывать предметы!?
Вот как это выглядит в статье:
![alt text](https://i.stack.imgur.com/ibemt.png)
А вот так это выглядит с моими элементами:
![alt text](https://i.stack.imgur.com/NaN8K.png)
Есть ли спрос на вещи, которые можно переупорядочить?В статье используются Person-объекты, но они очень просты и не реализуют никаких дополнительных интерфейсов.Я также, как вы можете видеть, проверяю использование 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 ?!Кажется, вы можете переупорядочивать только те элементы, которые имеют определенный тип , объявленный как параметр типа в ObservableCollection.Таким образом, если я заявляю, что он содержит объекты «Персона» и смешивается в объектах «Персона», а не с SomePerson и OtherPerson, я могу переместить этих .