C# 直接从视图调用ViewModel。DataContext本身可以更改吗?

C# 直接从视图调用ViewModel。DataContext本身可以更改吗?,c#,windows-phone-7,data-binding,mvvm,mvvm-light,C#,Windows Phone 7,Data Binding,Mvvm,Mvvm Light,有时,我需要从视图调用VM。我知道,这不是MVVM风格,但仍然是。我应该总是重新检查DataContext作为我的VM(以防它可以通过从墓碑或类似的东西重新激活而改变),还是只需存储一次就足够了 var vm = DataContext as MyViewModel; if (vm == null) return; vm.DoSomething(); DataContext通过Mvvm灯光定位器设置 DataContext="{Binding MyViewModel, Mode=OneWay,

有时,我需要从视图调用VM。我知道,这不是MVVM风格,但仍然是。我应该总是重新检查DataContext作为我的VM(以防它可以通过从墓碑或类似的东西重新激活而改变),还是只需存储一次就足够了

var vm = DataContext as MyViewModel;
if (vm == null) return;
vm.DoSomething();
DataContext通过Mvvm灯光定位器设置

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

我有时会这样说:

private MyViewModel viewModel;
加载页面时,然后向该字段添加值

viewModel = (MyViewModel)DataContext;
之后我可以在任何时候使用它


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

当它仅限于一页时,它总是安全的。无论是在constructor、Loaded event handler还是OnNavigatedTo中,您都可以创建对象,并且不再检查它们——要么页面与所有对象一起保存在内存中,要么在从逻辑删除重新激活时再次调用constructor、Loaded和OnNavigatedTo。墓志铭的问题主要发生在一个页面依赖于另一个页面创建了一些东西的情况下。

这就是问题所在,它足够安全吗?谢谢,这就是我想要的答案。