将数据传递给父视图 - 视图之间的通信

时间:2017-12-23 16:46:52

标签: c# wpf prism

我创建了一个包含GridViewButton的视图。我称之为a parent view。开头时,ItemsSource的{​​{1}}集合为空。现在我点击按钮弹出一个模态/弹出视图,我将其称为GridView

在子视图中有几个按钮。其中之一是为父视图创建新记录。

例如,如果我单击它,则会生成新的行数据。

现在我的问题是如何将刚刚创建的数据发送回父视图,以便可以刷新父视图中的Child view

2 个答案:

答案 0 :(得分:0)

您可以使用IEventAggregator服务在两个views之间进行通信创建一个事件,在父视图或父视图ViewModel中订阅它,并在子视图中发布它或子视图ViewModel。这样,两个视图之间没有明确的依赖关系。 你的记录模型类:

public class RecordModel
{
    //Some Properties
}

宣布事件:

public class RecordAdded : PubSubEvent<RecordModel>
{

}

在父视图/ viewModel中:

eventAggregator.GetEvent<RecordAdded>().Subscribe(OnRecordAdded);
private void OnRecordAdded(RecordModel e)
{

}

在您的子视图/ viewmodel中:

eventAggregator.GetEvent<RecordAdded>().Publish(new RecordModel
{
    //The popup data
});

答案 1 :(得分:0)

我认为你的视图模型将完成所有工作。如果是这样,他们之间有很多沟通选择,最明显的是通过IEventAggregator。或者,创建一个服务作为父视图的数据源,并为子视图提供一个公开CreateItem功能的表面...以便服务通知新视图的父视图,你可以去对于ObservableCollectionINotifyPropertyChangedIEventAggregator或简单的.Net事件,仅举几个例子。

IEventAggregator示例:

internal class ChildViewModel
{
    public ChildViewModel( IEventAggregator eventAggregator )
    {
        CreateItemCommand = new DelegateCommand( () => eventAggregator.GetEvent<ItemCreatedEvent>().Publish( new Item() ) );
    }
}

internal class ParentViewModel
{
    public ParentViewModel( IEventAggregator eventAggregator )
    {
        eventAggregator.GetEvent<ItemCreatedEvent>().Subscribe( x => UpdateData( x ) );
    }
}