MVVM: Управление отношениями «многие ко многим» с помощью дерева в (Silverlight) - PullRequest
3 голосов
/ 05 мая 2011

Извините, что задаю только широкий вопрос, но у меня возникли проблемы с размышлениями о том, как подойти к этой проблеме.

У меня есть отношения многие ко многим:

Product 1 --- * ProductCategory * --- Category

Категория также имеет:

Category 0..1 --- * Category (As SubCategories)

То, что я хочу видеть в виде дерева со всеми категориями и иметь возможность установить флажок для создания сущности ProductCategory.Я не знаю, как подойти к этому с MVVM.

enter image description here

В ASP.NET при рендеринге в виде дерева я проверял бы, был ли CategoryId узла, который я рендерил, былв моем списке «ProductCategory», если бы это было так, я бы поставил флажок и, таким образом, установил начальное состояние.

Затем я бы прикрепил обработчики событий к узлам (вместе, возможно, с некоторыми данными), чтобы прифлажок был отмечен / не отмечен, он будет добавлять / удалять соответствующую сущность из моего списка.

Проблема в том, что я пытаюсь перейти к MVVM, и иногда вижу, как именно это помогает, и в то время как некоторые вещи более аккуратныделать что-то сложное кажется болью!Например, моей первоначальной мыслью было связать Category (Root) верхнего уровня с деревом и отобразить все сущности, используя HierarchicalDataTemplate:

                <sdk:TreeView Margin="0,3,30,3" ItemsSource="{Binding Categories}" Height="300">
                    <sdk:TreeView.ItemTemplate>
                        <sdk:HierarchicalDataTemplate ItemsSource="{Binding SubCategories}">
                            <StackPanel Orientation="Horizontal">
                                <CheckBox></CheckBox>
                                <TextBlock Text="{Binding Name}" HorizontalAlignment="Left"></TextBlock>
                            </StackPanel>
                        </sdk:HierarchicalDataTemplate>
                        <!---->
                    </sdk:TreeView.ItemTemplate>

Проблема в том, что я не могу связать свой флажок с чем-либо, потому чтоВ категории нет поля, которое я могу использовать, чтобы прикрепить его к продукту ...

Пожалуйста, может ли гуру MVVM пролить свет на это, или мне просто пойти по маршруту "события"?

Большое спасибо.

1 Ответ

0 голосов
/ 05 мая 2011

Один из подходов - добавить свойство IsChecked к вашей модели представления категории, а затем привязать его к флажку.Когда его значение установлено в true, модель представления может сделать вызов куда угодно.Например, он может добавить свое собственное имя продукта в коллекцию фильтров для другого элемента управления.

Одной из сильных сторон шаблона mvvm является то, что модели представления могут иметь ссылки друг на друга или на другие вещи, а также иметь свойства, которые вы не хотите добавлять в реальные объекты

...