【问题标题】:Direct calls from View to ViewModel. Can DataContext be changed on itself?从 View 直接调用 ViewModel。可以自行更改 DataContext 吗?
【发布时间】:2013-10-28 13:28:41
【问题描述】:

有时,我需要从 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}}"

【问题讨论】:

    标签: c# windows-phone-7 data-binding mvvm mvvm-light


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这就是我正在寻找的答案。
    【解决方案2】:

    我有时会这样使用:

    private MyViewModel viewModel;
    

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

    viewModel = (MyViewModel)DataContext;
    

    之后我可以在我的视野中随时使用它。

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

    【讨论】:

    • 那么问题来了,它足够安全吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多