我在 Mvvm light 工具包中使用消息传递完成了这项工作。它使用一种叫做“PubSub”的东西,意思是“发布消息,订阅消息”
我在模态窗口的 GridView 中使用了一个命令。这是 XAML:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command={Binding ItemSelectedCommand} />
</i:EventTrigger>
</i:Interaction.Triggers>
根据您使用的 MVVM 工具包的风格(如果有),语法可能会有所不同。就我而言,正如我所说,MVVM 灯。最终,我使用 iCommand 接口将此命令传递给我的视图模型。就我而言,cmd 引用指向 Galasoft.MvvmLight.Command:
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;Assembly=GalaSoft.MvvmLight.Extras.SL4"
在我的子窗口的 ViewModel 中,我注册了命令,当它被触发时,我调用了这一行:
Messenger.Default.Send<TSMVVM.Model.WorkOrders>(SelectedWorkOrder);
这一行通过 SelectedWorkOrder 发布(发送)WorkOrders 类型的消息(这是我的应用程序中的模型类)。这行代码位于一个命令中,该命令在我的 gridview 的 SelectionChanged 事件中触发。示例代码是:
_ItemSelectedCommand = new RelayCommand(WorkOrderSelected);
private void WorkOrderSelected()
{
Messenger.Default.Send<TSMVVM.Model.WorkOrders>(SelectedWorkOrder);
}
在我的父窗口中,在构造函数中,我有这个:
Messenger.Default.Register<TSMVVM.Model.WorkOrders>(this, SetWorkOrder);
此行注册(或订阅)WorkOrders 类型的消息。每当通过我的应用程序发送 WorkOrder 类型的消息时,它都会调用一个函数:SetWorkOrder,如下所示:
private void SetWorkOrder(TSMVVM.Model.WorkOrders wo)
{
this.SelectedWO = wo;
}
我的 DataForm 有一个绑定到 WorkOrders 的 ItemsSource 和一个绑定到 SelectedWO 的 CurrentItem,并使用 TwoWay 绑定进行设置。因此,当我更新 SelectedWO(通过 Mvvm light 工具包的 viewmodelbase 实现 INotifyPropertyChanged)时,DataForm 也会相应更新。
如果您需要更多信息,请告诉我!
斯科特