0

有时,我需要从 View 到 VM 进行一些调用。我知道,它不是 MVVM 风格,但仍然如此。我应该总是重新检查 DataContext 是我的虚拟机(以防它可以通过从墓碑重新激活或类似的东西来改变),还是只存储一次就足够了?

var vm = DataContext as MyViewModel;
if (vm == null) return;
vm.DoSomething();

DataContext 是通过 Mvvm Light Locator 设置的

DataContext="{Binding MyViewModel, Mode=OneWay, Source={StaticResource ViewModelLocator}}"
4

2 回答 2

0

我有时会使用它,就像这样:

private MyViewModel viewModel;

页面何时加载,然后向该字段添加值

viewModel = (MyViewModel)DataContext;

在它之后,我可以在任何时候使用它。

我知道它不是 MVVM,但仍然 ;)

于 2013-10-19T22:44:20.073 回答
0

当它仅限于一个页面时,它总是安全的。无论是在构造函数、Loaded 事件处理程序还是 OnNavigatedTo 中,您都可以创建对象并且不再检查它们 - 页面与所有对象一起保存在内存中,或者在从墓碑重新激活时再次调用构造函数 Loaded 和 OnNavigatedTo。墓碑问题主要发生在一个页面依赖于另一个页面创建某些东西的事实的情况下。

于 2013-10-20T13:46:22.317 回答