我们正在使用MVVM Light。我们必须创建同一个小类集合的多个实例:CustomerViewModel,ProductViewModel和OrdersViewModel。为了确保我们正在调用任何这些类的相同实例,我们创建了一个GUID并将其与这3个类中的任何一个的每个实例相关联。这是我们第一次使用MVVM Light。我们的理解是MVVM Light将在每次调用指定特定实例的GetInstance等调用时使用Singleton模式。因此,为了确保我们调用相同的一个,我们传递了我们之前与特定类关联的GUID。但它总是失败。
我们已经在这里捣乱了3个星期,并没有接近解决它。
我在Customer类的构造函数中设置了断点,以查看GUID是什么:
public CustomerViewModel()
{
RefreshList();
AvailableFields = typeof(Customer).GetProperties().Select(a => a.Name).ToList<String>();
}
我将在RefreshList()上设置断点。 (我们的RefreshList()方法用于获取数据,然后在视图中的数据网格中显示。)正如您所看到的,该类的名称是CustomerViewModel。
但后来当我们尝试导航到客户详细信息视图模型时,它会在这种情况下调用CustomerViewModel应该是同一个实例:
public static CustomerViewModel GetCustomersById(string id)
{
return ServiceLocator.Current.GetInstance<CustomerViewModel>(id);
}
此代码位于ViewModelLocator中。我在return语句上设置了一个断点并检查了id的值,它应该等于之前创建的GUID。它永远不会。为什么不?我们做错了什么?