Динамическое добавление видов в Silverlight и MVVM - PullRequest
3 голосов
/ 12 мая 2010

Я начинаю переписывать все свое бизнес-приложение silverlight в шаблоне MVVM; Моя первая остановка это:

У меня есть страница (View1) с соответствующим ViewModel1 (со свойством 'IEnumerable AllData');

Теперь в этом представлении я хочу иметь элемент управления в виде дерева, в котором один узел будет заполнен другим представлением2;

Мой вопрос: 1. Как это сделать? - Я не могу перебрать свойство AllData, так как оно загружается асинхронно ... - таким образом, я не знаю количество View2s для вставки - Я не знаю, как это сделать из ViewModel1: (

  1. Нужно ли ViewModel2 со свойством MyDataEntity CurrentData?
    • или я могу привязать свойство AllData из ViewModel1

Вы можете мне помочь?

Спасибо

1 Ответ

1 голос
/ 16 мая 2010

Звучит так, будто вы пытаетесь составить представление Master / Detail? Где MasterView содержит TreeView всех DetailView.

Так что ViewModels выглядит примерно так:

public class DataListViewModel
{
    public DataDetailViewModel[] AllData {get;}
}

public class DataDetailViewModel
{
    public Data Model {get;}
    public DataListViewModel Parent {get;}
}

Если это более или менее точно, то у вас впереди довольно лёгкий путь, и вам сначала нужно выбрать View or ViewModel.

При первом выборе View вы можете использовать DataTemplate для TreeView, который будет управлять элементом TreeViews.

<DataTemplate x:Key="dataTemplate">
  <my:DataDetailView DataContext="{Binding Path=.}" />
</DataTemplate>

Просто убедитесь, что ваш View имеет конструктор по умолчанию.

При первом выборе ViewModel вам нужно будет использовать TemplateSelector, который будет вытягивать правильный View в зависимости от устанавливаемого объекта. Это, вероятно, наиболее гибкий способ, поскольку вы можете использовать различные представления в зависимости от класса Detail.

Для получения дополнительной информации см. Ссылку http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector

...