如何在不同的嵌套ViewModel之间导航?

时间:2013-08-29 15:09:55

标签: c# wpf mvvm viewmodel

我有一个ViewModel Call Apple,它有AppleItems。在Apple ViewModel的UI中,有一个名为AppleNote的嵌套ViewModel,它有AppleNote项。当我在Apple ViewModel的UI上时,有一个图标可以让我导航到AppleNote视图模型。我这样做的方式是在下面的代码中使用eventagregators show。它使用绑定作为DelegateCommand。我的问题是,当我在Apple ViewModel中的Item#3或AppleItems的任何其他项目时,当我点击该项目的AppleNote时,它会引导我进入正确的viewModel,但是当我想切换回该viewModel的AppleItem视图时,我刚到AppleItems的第一个项目。如何判断返回AppleItems viewModel时保留项目来自哪里。如果有任何混淆让我知道,所以我可以说清楚。

以下是摘要:

AppleViewModel - >具有 - > AppleItems

             |

            Has--> AppleNoteViewModel-->Has-->AppleNotesItem

AppleNote的某个AppleItem正在运行,但是回到某个项目是行不通的。

   private void AppleCommandExecute(object commandParameter)
    {

          _eventAggregator.Publish
            (new ChangeValueViewEventArgs
            {
                ViewModelType = typeof (AppleViewModel),


                Data = ValueId.ToString()
            });
    }

1 个答案:

答案 0 :(得分:1)

当我直接在我的数据类中实现INotifyPropertyChanged接口时,我没有任何嵌套视图模型,但我确实有嵌套或分层数据类。在我的基本集合类中,我有一个名为CurrentItem的属性,其类型与集合中的项目相同。

当我将其中一个集合绑定到集合控件的ItemsSource属性时,我还将CurrentItem属性绑定到控件的SelectedItem属性。这实际上意味着我总是知道每个集合中的当前项目。

如果您实施其中一个CurrentItem属性,那么您将始终知道选择了哪个AppleItemAppleNote。您没有 将这些属性放入集合类中......您只需将正确类型的属性添加到视图模型中即可。关键是如果你总是绑定到SelectedItem属性,那么你将始终知道选择了哪个项目。