MVVM:当选择另一个视图(带有列表框)中的项目时,填充视图(使用列表框)

时间:2013-05-14 06:06:45

标签: wpf mvvm

我有一个主题列表,每个主题都有一些示例。我希望能够做的是,当选择一个主题时,我将使用所选主题的所有示例填充另一个视图。我还在学习MVVM所以不确定如何实现这个。

编辑: 我试图做的是有两个单独的视图(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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

我们假设你有类似的东西:

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

在你的ViewModel中的某个地方:

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

然后您在Topics ListBox中的绑定可能如下所示:

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

然后,您可以绑定到此ListBox所选项目的Examples,如下所示:

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

答案 1 :(得分:0)

取决于你需要使用多少数据,恕我直言,这是最简单的方法。

首先对所有列表使用ObservableCollection

拥有包含主题视图模型列表的主父视图模型 其中每个主题视图模型包含一个示例列表

父视图模型中的

具有将保存当前所选主题的属性。

在您的视图中,您可以使用2个列表框。一个绑定到主题列表。另一个绑定到选定的主题示例列表。

网上有很多这样的例子。 此stackoverflow问题显示如何绑定到列表和选定的项目 MVVM: Binding to ListBox.SelectedItem?

答案 2 :(得分:0)

如果我理解正确

你有一个带有2x View的窗口,其中每个View都有自己的ViewModel,到目前为止?

所以你应该给我们一个Mediator resp。事件聚集

现在您可以从一个ViewModel订阅并从另一个ViewModel发布

获得Mediator resp。事件聚集

您可以使用现有的框架,例如

或自己创建