大家好!
我在WPF应用程序上使用MVVM Light。我有一个页面,我使用用户控件提供具有各自viewmodel的视图。我使用ViewModelLocator把那些连接起来。我已经弄清楚了如何通过将ContentControl的Content绑定到一个被设置的可观察属性来导航。下面是XAML的一个片段:
<ContentControl Content="{Binding CurrentViewModel}" Grid.Row="1" />
MainViewModel创建了对我的两个不同viewmodel的引用:
private ViewModelBase _currentViewModel;
private readonly static LogInViewModel _loginViewModel = new LogInViewModel();
private readonly static ClockEventViewModel _clockEventViewModel = new ClockEventViewModel();
在我的构造函数中,我从其他ViewModels注册了一些动作:
_loginViewModel.AllowClockEvent += ExecuteClockEventViewCommand;
_clockEventViewModel.ReturnToLogin += ExecuteLoginViewCommand;
它们在每个ViewModel中是这样实现的:
public Action ReturnToLogin = delegate { };
最后,在这些方法中,我将CurrentViewModel设置为不同的ViewModel。例如:
CurrentViewModel = _clockEventViewModel;
这工作得很好,但是我不能做的是,在另一个视图模型成为当前视图模型时,我想捕获它并做一些初始工作。有点像NavigateTo事件。我确信可能有一个简单的方法,但我看过ViewModelBase,我看到没有方法来覆盖给我这个功能。
谁已经这样做了?如果有比我的方法更好的方法,请告诉我。
我最终要做的是通过exposed _clockEventViewModel调用我需要的方法。这比我想象的要简单。