gpt4 book ai didi

windows-phone-7 - 如何从后面的代码访问 ViewModelLocator 中的 MainViewModel?

转载 作者:行者123 更新时间:2023-12-03 18:18:16 25 4
gpt4 key购买 nike

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

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

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

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

这是提供的 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;
}
}
}

那么从另一个 View 后面的代码中,您如何访问 Main(MainViewModel 包含所有数据列表并有我调用的搜索方法)?还是应该?

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

谢谢。

最佳答案

在 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

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

关于windows-phone-7 - 如何从后面的代码访问 ViewModelLocator 中的 MainViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7045357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com