我正在使用 MVVM light 并发现 ViewModelLocator 可用于抓取任何视图模型,因此我可以使用它来抓取值。
我一直在做这样的事情
public class ViewModel1
{
public ViewModel1()
{
var vm2 = new ViewModelLocator().ViewModel2;
string name = vm2.Name;
}
}
这样,如果我需要在视图之间切换,我可以轻松获得其他值。我不确定这是否是最佳做法(这似乎很方便,让我怀疑这是否是不好的做法哈哈),因为我知道有一些信使类的东西,不起诉我是否应该这样做。
编辑
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 >();
}
}
编辑
这是我试图解决的一个场景。
我有一个观点,你可以添加价格和商店名称。当您单击商店名称的文本框时,您将被转移到另一个视图。此视图有一个文本框,您可以在其中键入您要查找的商店,当您键入一个选择列表时,将填充所有可能的匹配项和有关该商店的信息。
然后用户选择他们想要的商店。他们被转移回他们“添加价格”的视图,现在商店名称也被填写了。
如果他们点击“添加”按钮,它将获取价格、商店名称和条形码(来自“添加价格视图”之前的视图)并发送到服务器。
如您所见,我需要来自不同视图的数据。