我创建了一个包含GridView
和Button
的视图。我称之为a parent view
。开头时,ItemsSource
的{{1}}集合为空。现在我点击按钮弹出一个模态/弹出视图,我将其称为GridView
。
在子视图中有几个按钮。其中之一是为父视图创建新记录。
例如,如果我单击它,则会生成新的行数据。
现在我的问题是如何将刚刚创建的数据发送回父视图,以便可以刷新父视图中的Child view
?
答案 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
功能的表面...以便服务通知新视图的父视图,你可以去对于ObservableCollection
,INotifyPropertyChanged
,IEventAggregator
或简单的.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 ) );
}
}