Я относительно новичок в опыте Silverlight и пытаюсь создать приложение MVVM с DomainService, которое возвращает POCOs в качестве моделей. У меня есть UserControl, у которого есть TreeView с набором ItemsSource для привязки к ObservableCollection типа, который имеет ObservableCollection как одно из его свойств, и эта коллекция имеет тип, который имеет свойство ObservableCollection. Поэтому я использую HierarchicalDataTemplate как ItemTemplate TreeView с TextBlocks, чтобы отобразить свойство Name каждого элемента. Ниже я расскажу о некотором коде.ObservableCollection with ObservableCollections не корректно отображает
Так что классы были бы что-то вроде этого:
public class A
{
public int ID { get; set; }
public string Name { get; set; }
public ObservableCollection<B> Bs { get; set; }
}
public class B
{
public int ID { get; set; }
public string Name { get; set; }
public ObservableCollection<C> Cs { get; set; }
}
public class C
{
public int ID { get; set; }
public string Name { get; set; }
}
В основном, мои коллекции становятся заселены из DataRepository с помощью метода, который получает списки A, B и C. добавляет каждый экземпляр надлежащим образом с помощью LINQ через петли foreach. И возвращает список. Метод работает правильно, как я его вызвал из default.aspx.cs и сделал шаг, чтобы подтвердить, что все данные правильно добавлены.
Но моя проблема в том, что когда она отображается на экране, ни одна из коллекций не верна. Например, первый элемент дочерней коллекции «A» в «B» должен иметь счет более 4000, и все же ни один из них не показан. И тем не менее, первый элемент «B», который должен находиться в коллекции «Bs» первого «A», показан для второго элемента «A».
(пример того, что оно должно быть)
a1
- B1.1
- c1.1.1
- c1.1.2
- c1.1.3
- B1.2
- c1.2.1
- c1.2.2
- B1.1
a2
- B2.4
- c2.4.1
- c2. 4.2
- c2.4.3
- B2.4
а3
- B3.6
- c3.6.1
- c3.6.2
- c3.6.3
- B3.6
а4
- b4.8
- c4.8.1
- c4.8.2
- c4.8.3
- b4.8
(пример того, что он показывает)
- a1
- а2
- B2.2
- c2.2.2
- B2.2
- а3
- а4
- b4.4
- c4.4.4
- b4.4
После некоторого исследования, единственный образец, который я вижу в том, что иерархия основана на идентификаторы будучи то же самое.
Вот примеры кода:
(DataContext устанавливается в UserControl ресурсов)
<sdk:TreeView ItemsSource="{Binding Path=As}" >
<sdk:TreeView.ItemTemplate>`
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Bs}">
<TextBlock Text="{Binding Path=Name}" />
<sdk:HierarchicalDataTemplate.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Cs}">
<TextBlock Text="{Binding Path=Name}" />
<sdk:HierarchicalDataTemplate.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding}">
<TextBlock Text="{Binding Path=Name}" />
</sdk:HierarchicalDataTemplate>
</sdk:HierarchicalDataTemplate.ItemTemplate>
</sdk:HierarchicalDataTemplate>
</sdk:HierarchicalDataTemplate.ItemTemplate>
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
ViewModel
public class myViewModel
{
private myDomainContext context = new myDomainContext();
public ObservableCollection<A> As
{
get
{
LoadOperation<A> loadOp = context.Load(context.GetAsQuery());
return new ObservableCollection<A>(loadOp.Entities);
}
}
}
Я извиняюсь о длине этого вопроса, Я надеялся не быть таким расплывчатым и получить полезные советы. Этот вопрос преследует меня в течение нескольких дней, и я готов к продолжению. Пожалуйста, помогите мне выбраться из гадости. Спасибо заранее. И если у вас есть хорошие ссылки, которые были бы полезны для моих знаний MVVM, я был бы очень благодарен им.
Мой Окружающая среда: - Asp.Net 4 - Silverlight 4 - VisualStudio 2010
Спасибо, кто когда-либо добавлял отступ в xaml. – jhorton