如何从后台代码访问 ViewModelLocator 中的 MainViewModel?

2024-04-29

使用 MVVM light 为我的视图模型构建 WP7 应用程序。我正在使用当您通过 NuGet 添加库时添加的 ViewModelLocator。效果很好,但现在我需要从代码访问 ViewModel。

在我的代码中,用户单击一个按钮,我需要搜索 MainViewModel(其中包含多个视图模型)并根据用户输入的条件找到一个。

通常我只会响应按钮的 Click 事件,但我没有 ViewModelLocator 类的实例变量来获取 MainViewModel 来执行搜索。使用 Windows Phone 7 的默认模板(非 MVVMLight),App 类具有主视图模型的静态变量,因此您可以随时使用 App.ViewModel 访问它。

Twitter 上有一些关于使用命令的讨论,这会很好,但在某些时候我必须跨多个虚拟机执行代码搜索才能获得我需要的结果。可能需要将 ISearchViewModel 服务注入视图或其他东西才能使其工作。

以下是提供的 ViewModelLocator 的实现:

public class ViewModelLocator
{
    private static MainViewModel _main;

    public ViewModelLocator()
    {
        _main = new MainViewModel();
    }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
    "CA1822:MarkMembersAsStatic",
    Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return _main;
        }
    }
}

那么,从另一个视图的代码后面,如何访问 Main(MainViewModel 包含所有数据列表并具有我调用的搜索方法)?或者你应该吗?

只是想知道人们如何解决此类问题?

Thanks.


在 MVVM-Light 中,ViewModelLocator 作为应用程序资源提供。因此您仍然可以直接访问它,但语法不同。如果您查看 App.xaml,您应该会在某处看到这段代码。

<Application.Resources>
    <vm:ViewModelLocator x:Key="Locator"
                         d:IsDataSource="True" />
</Application.Resources>

您可以从应用程序中的任何位置访问应用程序的资源,因此也可以使用以下代码访问 MainViewModel:

(App.Current.Resources["Locator"] as ViewModelLocator).Main

这适用于任何应用程序资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从后台代码访问 ViewModelLocator 中的 MainViewModel? 的相关文章

随机推荐