我有一个主要的ViewModel,包含一系列项目,我在一定数量的UserControl中使用这些项目,这些UserControl显示在主视图的ContentControl中。我当前的数据交换方式是在主ViewModel中对每个ViewModel进行引用,并在每个UserControl中引用一个主ViewModel。然而,我不确定这是否是正确的方法,因为我有一个ViewModelLocator,我希望这个类有一些功能支持类似这样的操作。
请问有人能告诉我我正在做的是否正确,或者在MVVM Light中是否有更好的方法?
编辑:
当我搜索其他内容时,我发现了这个,它会是更好的解决方案吗?
请问有人能告诉我我正在做的是否正确,或者在MVVM Light中是否有更好的方法?
编辑:
当我搜索其他内容时,我发现了这个,它会是更好的解决方案吗?
private ViewModelLocator locator = new ViewModelLocator();
然后使用定位器属性来引用每个ViewModel?
编辑2:
显然我认为会起作用的方法并没有起作用,一开始我只在主ViewModel
中引用,这个方法可以工作,但是当我尝试在UserControls
中尝试此方法时,我的应用程序崩溃了。目前我正在尝试第一个编辑中提出的可能解决方案。
MainViewModel.cs(其他ViewModel类似,只有对主ViewModel的引用)
public class MainViewModel : ViewModelBase
{
private ItemAddViewModel itemAddViewModel;
private ItemsViewModel itemsViewModel;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
ItemsList = Item.GetItemsList();
itemAddViewModel = ServiceLocator.Current.GetInstance<ItemAddViewModel>();
itemsViewModel = ServiceLocator.Current.GetInstance<ItemsViewModel>();
ShowItemsView();
}
...
private void ShowItemsView()
{
CurrentControl = itemsViewModel;
}
...