Mvvm Light Devotees如何处理以下情况。我有几个使用它们自己的“Child”ViewModel实例的“Master”ViewModels。即Mvvm Light ViewModel With ViewModel
Child ViewModel - “OrderLineItemListViewModel”订单中订单项列表的视图模型。
Parent ViewModel - “OrderDetailViewModel”订单的视图模型。 父VIewModel - “OrderChargeViewModel”用于收取订单的视图模型。
父视图模型都需要有一个OrderLineItems列表,并且两者都可以同时打开。目前,我已经设置父ViewModel包含一个child ViewModel类型的属性,然后可以引用它。
public class ChildViewModel
{
public ChildViewModel()
{
Items = new ObservableCollection<ListItemViewModel>
{
new ListItemViewModel("One"),
new ListItemViewMOdel("Two")
}
}
public ObservableCollection<ListItemViewModel> Items {get; private set;}
}
public class ParentViewModel
{
public ParentViewModel()
{
ChildViewModel = new ChildViewModel();
}
public ChildViewModel ChildViewModel {get; set;}
}
<Window>
<DataGrid ItemsSource={Binding ChildViewModel.Items} />
</Window>
现在,我觉得应该有一个方式与ViewModelLocator和消息要做到这一点,但是我还没有想出一个干净的方式来做到这一点。我知道如何使用ViewModelLocator来创建ViewModels的非单例实例,所以没关系。然而,我无法弄清楚如何让父ViewModel响应子ViewModel消息并知道该消息是否来自“它的”子ViewModel,因此应该对其执行操作。
任何人对如何处理这个问题有任何建议,还是应该继续按照我的方式去做?我认为最重要的部分是现在,我有选择地使用ViewModelLocator,但不确定最终是否会直观。
我使用Mvvm Light,如标题所示。感谢您的意见,我不认为我们正在处理相同的情况。我不想避免使用消息传递,我正在尝试使用它。我需要弄清楚如何使用ViewModelLocator来创建我的父视图模型和子视图模型(目前它只创建父视图,然后父视图手动创建它的子视图),并让父视图知道何时来自子视图的消息是*它的*孩子(反之亦然),因此它可以采取相应的行动。 – 2013-03-12 20:02:34
你为什么要使用信使?它到底是什么?我发现尽可能少地使用信使是更好的,通常有更好的解决方案。对于框架问题抱歉,没有仔细阅读。 – 2013-03-12 20:09:51
我想要使用管理器,这样我就可以更完全地将我的视图模型与其他视图模型分离开来,并且更完全地利用视图模型定位器。 – 2013-03-13 12:40:00