Я сделал это в легком наборе инструментов Mvvm, используя обмен сообщениями. Он использует что-то под названием «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);
Эта строка публикует (отправляет) сообщение типа WorkOrders (который является классом модели в моем приложении), проходящее через SelectedWorkOrder. Эта строка кода находится внутри команды, которая запускается при событии SelectionChanged моего gridview. Пример кода для этого:
_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 имеет ItemSource, связанный с WorkOrders, и CurrentItem, связанный с SelectedWO, установленным с привязкой TwoWay. Поэтому, когда я обновляю SelectedWO (реализуя INotifyPropertyChanged через viewmodelbase набора инструментов Mvvm light), DataForm обновляется соответствующим образом.
Если вам нужна дополнительная информация, дайте мне знать!
Scott