【发布时间】:2013-06-04 08:29:18
【问题描述】:
我有一个主ViewModel,其中包含我正在使用的一定数量的UserControls 的项目列表,这些项目显示在主视图上的ContentControl 中。我目前在ViewModels 之间交换数据的方式是引用主要ViewModel 中的每个ViewModels,以及每个UserControl 中的主要ViewModel 之一。但是我不知道这是不是正确的做法,因为我有一个ViewModelLocator,我有点希望这个类有一些功能来支持这样的东西。
谁能告诉我这样做是否可行,或者在 MVVM Light 中是否有更好的方法?
编辑:
我在寻找不同的东西时发现了这个,这是一个更好的解决方案吗?
private ViewModelLocator locator = new ViewModelLocator();
然后使用定位器属性来引用每个 ViewModel?
EDIT2:
显然,我认为可行的方法不起作用,起初我在主要的 ViewModel 中只有引用并且这有效,但是当我在 UserControls 中尝试此操作时,它使我的应用程序崩溃。我目前正在尝试第一次编辑的可能解决方案。
MainViewModel.cs(其他类似,仅参考主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;
}
...
【问题讨论】:
标签: c# mvvm-light