带有 WPF ViewModel 导航操作的 MVVM Light
MVVM Light with WPF ViewModel Navigation Actions
美好的一天!
我在 WPF 应用程序上使用 MVVM Light。我有一个页面,我正在使用用户控件来提供具有各自视图模型的视图。我正在使用 ViewModelLocator 来连接它们。我已经弄清楚如何通过将 ContentControl 的内容绑定到已设置的可观察对象 属性 来进行导航。这是 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 并且我没有看到任何方法来覆盖给我这种能力。
谁做过这个?如果有比我的方法更好的方法,请告诉我。
我最终做的是通过公开的 _clockEventViewModel 调用我需要的方法。其实比我想象的要简单。
美好的一天!
我在 WPF 应用程序上使用 MVVM Light。我有一个页面,我正在使用用户控件来提供具有各自视图模型的视图。我正在使用 ViewModelLocator 来连接它们。我已经弄清楚如何通过将 ContentControl 的内容绑定到已设置的可观察对象 属性 来进行导航。这是 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 并且我没有看到任何方法来覆盖给我这种能力。
谁做过这个?如果有比我的方法更好的方法,请告诉我。
我最终做的是通过公开的 _clockEventViewModel 调用我需要的方法。其实比我想象的要简单。