我有一个主题列表,每个主题都有一些示例。我希望能够做的是,当选择一个主题时,我将使用所选主题的所有示例填充另一个视图。我还在学习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);
}
}
}
答案 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。事件聚集
您可以使用现有的框架,例如
或自己创建