我在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"
在視圖模型爲我的孩子的窗口,我註冊了命令,當它的觸發,我把這行:
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);
此行寄存器(或定製)類型工作訂單的消息。通過我的應用程序發送消息的任何時間,類型工單的,它調用一個函數:SetWorkOrder,低於:
private void SetWorkOrder(TSMVVM.Model.WorkOrders wo)
{
this.SelectedWO = wo;
}
我的DataForm已綁定工作訂單的的ItemsSource,註定SelectedWO一個CURRENTITEM,設置雙向綁定。因此,當我更新SelectedWO(通過Mvvm light toolkit的viewmodelbase實現INotifyPropertyChanged)時,DataForm會相應更新。
如果您需要更多的信息,讓我知道!
斯科特