gpt4 book ai didi

windows-phone-7 - 使用 ViewModelLocator 抓取其他 VM 以在另一个 Vm 中使用是否不好?

转载 作者:行者123 更新时间:2023-12-04 07:22:37 27 4
gpt4 key购买 nike

我正在使用 MVVM light 并发现 ViewModelLocator 可用于获取任何 View 模型,因此我可以使用它来获取值。

我一直在做这样的事情

public class ViewModel1
{
public ViewModel1()
{
var vm2 = new ViewModelLocator().ViewModel2;
string name = vm2.Name;
}
}

这样,如果我需要在 View 之间切换,我可以轻松获得其他值。我不确定这是否是最佳实践(它看起来很方便让我想知道这是否是不好的实践大声笑)因为我知道有一些信使类的东西并且如果那是我应该做的方式就不会起诉。

编辑

  static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

SimpleIoc.Default.Register<ViewModel1>();
SimpleIoc.Default.Register<ViewModel2>();
}


[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public ViewModel1 ViewModel1
{
get
{
return ServiceLocator.Current.GetInstance<ViewModel1 >();
}
}

编辑

这是我试图解决的一个场景。

我认为您添加了价格和商店名称。当您单击商店名称的文本框时,您将转到另一个 View 。此 View 有一个文本框,您可以在其中键入要查找的商店,当您键入一个选择列表时,系统会填充所有可能的匹配项和有关该商店的信息。

然后用户选择他们想要的商店。他们被转移回他们“添加价格”的 View ,现在商店名称也被填写。

如果他们点击“添加”按钮,它会获取价格、商店名称和条形码(这来自“添加价格 View ”之前的 View )并发送到服务器。

如您所见,我需要来自不同 View 的数据。

最佳答案

我正在尝试了解您的情况。在 MVVMlight 论坛中,您为这个问题添加了以下上下文:

“我有一些数据需要传递到多个屏幕并可能再次返回。”

为了在 VM 之间传递数据,我也会 - 正如上面的 Matt - 使用 MVVMLight 的 Messenger 类,只要它是“即发即忘”。但“可能会再次回来”的评论听起来很棘手。

我可以想象在某些情况下可能需要这样做。例如。向导界面。在这种情况下,我会对向导负责收集的数据建模,然后将所有 View 绑定(bind)到表示该模型对象的同一 VM。

但这只是一个例子。因此,如果您能提供更多背景信息,我会很乐意尝试并提供帮助。

关于windows-phone-7 - 使用 ViewModelLocator 抓取其他 VM 以在另一个 Vm 中使用是否不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659230/

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