Привязка списка элементов, содержащих список элементов - PullRequest
0 голосов
/ 14 марта 2012

У меня есть класс:

public class Comment
{
    ...
    public List<Comment> Children;
}

В моей ViewModel у меня есть ObservableCollection с моими комментариями, привязка работает, но я хотел бы также связать Children.

Вот мой взгляд:

<ListBox 
    ItemsSource="{Binding Comments}" 
    ItemTemplate="{Binding Source={StaticResource comment}}">
</ListBox>

Шаблон является привязкой UserControl для каждого комментария к содержимому и дочерним элементам:

<Grid>
    <TextBlock Text="{Binding Body}" />

    <ListBox 
        ItemsSource="{Binding Children}" 
        ItemTemplate="{Binding Source={StaticResource comment}}">
    </ListBox>
</Grid>

Очевидно, что я не могу связать Children, потому что мне нужна коллекция ObservableCollection, но я не вижу, как это сделать, если я заменю в своем классе Comment список на ObservableCollection, он тоже не будет работать.

Прямо сейчас я перечисляю только мои Комментарии в своем списке в ViewModel, но я хотел бы сделать это рекурсивно для каждого ребенка.

Спасибо

1 Ответ

1 голос
/ 14 марта 2012

Насколько глубоко дерево?Могут ли комментарии детей иметь комментарии детей на произвольном уровне?В этом случае вы просматриваете иерархическую структуру данных и используете .Вот довольно простой пример: http://www.dev102.blogspot.com/2007/12/how-to-use-hierarchical-datatemplate-in.html, или статья MSDN: http://msdn.microsoft.com/en-us/magazine/cc700358.aspx#id0190065.

Если это просто простая двухуровневая структура, то есть два класса Commend и ChildCommend, и ваш подходбудет работать.

В любом случае, Комментарий кажется классом Model.Имеет смысл также иметь CommentVm с заметной коллекцией комментариев детей.Создание списка для ObservableCollection с помощью функции расширения linq. Выберите

...