2013-05-14 3 views
-1

У меня есть список тем, и для каждой темы есть несколько примеров. То, что я хочу сделать, это то, что при выборе темы, я буду заполнять другое представление всеми примерами для выбранной темы. Я все еще изучаю MVVM, поэтому не знаю, как это реализовать.MVVM: заполнить представление (со списком), когда выбран элемент из другого представления (со списком)

EDIT: То, что я пытаюсь сделать, состоит в том, чтобы иметь два отдельных вида (1 для тем и 1 для примеров), а когда выбрана тема, я буду «динамически» заполнять коллекцию примеров и показать их в списке видимости примеров.

Это то, что я до сих пор, моя идея состоит в том, чтобы передать ViewModel примера на TopicViewModel, но я не уверен, как это сделать, если оба вида устанавливаются в XAML главного окна:

public TopicViewModel SelectedTopic 
{ 
    get { return _selectedTopic; } 
    set 
    { 
     _selectedTopic = value; 
     OnPropertyChanged("SelectedTopic"); 

     //refresh list of exercises 
     if (_exampleViewModel != null) 
     { 
      _exampleViewModel.RefreshExercises(_selectedTopic.ID); 
     } 
    } 
} 

ответ

0

Давайте предположим, что у вас есть что-то вроде этого:

class Topic 
{ 
    public ObservableCollection<Example> Examples { get; private set; } 
} 

и в вашей ViewModel где-то так:

public ObservableCollection<Topic> Topics { get; private set; } 

Тогда ваше связывание в Темах ListBox может выглядеть следующим образом:

<ListBox x:Name="topicsListBox" ItemsSource="{Binding Topics}" /> 

Затем можно привязать к Examples выбранному элементу этого ListBox как это:

<ListBox x:Name="examplesListBox" 
     ItemsSource="{Binding SelectedItem.Examples, ElementName=topicsListBox}"/> 
+0

Ok, пытаясь расшифровать ваши пример и примените его в моем случае. Могу ли я не передать ExampleViewModel в ExampleView вместо этого, и он должен быть отражен в списке? –

+0

@RodelioMartinezRodriguez Я думал, что вы хотите отобразить * Collection * примеровViewModels в списке? Я думаю, вы могли бы установить SelectedItem (типа Topic) как DataContext на другом представлении, но затем просто установить ItemsSource ListBox в {Примеры привязки} – Botz3000

+0

В моем примере ModelViewModel уже существует модель ObservableCollection of Examples, которая может быть привязана к списку , Для каждого примераView имеется только один ExampleViewModel. –

0

в зависимости от того, сколько данных нужно работать с, ИМХО самый простой способ - это.

во-первых, использовать ObservableCollection для всех списков

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

в модели родительского вида имеют свойство, которое будет удерживать выбранную в данный момент тему.

на ваш взгляд, вы можете использовать 2 списка. один связан со списком тем. другой связан с списком примеров избранных тем.

есть куча примеров из Интернета с этим материалом. Этот StackOverflow вопрос показывает, как привязать к списку и выбранного элемента MVVM: Binding to ListBox.SelectedItem?

+0

Отредактировал мой вопрос, чтобы показать код, не знал, что не могу отправлять комментарии в комментариях. –

0

если я понял вас правильно

у вас есть одно окно с 2x View, где каждый View имеет здесь собственный ViewModel, правда до сих пор?

, поэтому вы, вероятно, должны быть посредником или eventaggregation

Теперь вы можете подписаться на один из ViewModel и публиковать с другой

получить Посредник соотв.Eventaggregation

вы можете использовать существующие рамочные как

или создать его на свой собственный

+0

Да, вы правы. Постараюсь заглянуть в те, которые вы рекомендовали, спасибо! –

+0

Похоже, я могу попробовать метод, представленный здесь: http://stackoverflow.com/questions/14412405/what-is-the-correct-way-to-pass-data-between-view-models –

+0

@RodelioMartinezRodriguez да что-то вроде что его «ViewModel1» будет вашим «ParentViewModel» – WiiMaxx

Смежные вопросы