0

我有一个主题列表,每个主题都有一些示例。What I want to be able to do is that when a topic is selected then I will populate another view with all Examples for that selected topic. 我还在学习 MVVM,所以不知道如何实现。

EDIT: What I am attempting to do is to have two separate views (1 for the topics and 1 for the examples), and when an a topic is selected then I will 'dynamically' populate the collection of the examples and show them in the示例视图的列表框。

这就是我到目前为止所拥有的,我的想法是将示例的 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);
        }
    }
}
4

3 回答 3

2

假设你有这样的东西:

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

在你的 ViewModel 某处:

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

然后您在主题列表框中的绑定可能如下所示:

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

然后,您可以Examples像这样绑定到此 ListBox 的选定项:

<ListBox x:Name="examplesListBox" 
         ItemsSource="{Binding SelectedItem.Examples, ElementName=topicsListBox}"/>
于 2013-05-14T06:21:12.947 回答
0

取决于您需要处理多少数据,恕我直言,最简单的方法就是这样。

首先对所有列表使用 ObservableCollection

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

在父视图模型中有一个属性将保存当前选定的主题。

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

网上有很多关于这些东西的例子。这个 stackoverflow 问题显示了如何绑定到列表和选定项 MVVM:绑定到 ListBox.SelectedItem?

于 2013-05-14T06:28:51.873 回答
0

如果我理解正确的话

你有一个带有 2x 视图的窗口,每个视图在这里都有自己的 ViewModel,对吗?

所以你可能应该给我们一个调解员。事件聚合

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

获得调解员响应。事件聚合

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

或自行创建

于 2013-05-14T09:54:20.733 回答