我正在使用 Prism/Unity 编写 WPF/MVVM 应用程序。我在导航区域时遇到如何将数据从一个用户控件传输到另一个用户控件的问题。
我有一个区域
这是由仅包含网格的用户控件(“ContactsList”)填充的,该网格由 ItemsSource 和 SelectedItem 绑定(bind)。
我想导航到 ContractEdit 并传递绑定(bind)到 SelectedItem 的联系人。
LocalRegionManager.RequestNavigate(ContactRegions.MainRegion, ContactsUri.ContactsEdit);
我可以在 Datacontext 或 Uri 中传递单个值,但我不想在 ListView 模型中已经拥有整个项目时必须返回数据库来获取数据。
如何将整个对象从列表用户控件传递到编辑控件?
提前致谢。
结论
我添加了 EventAggregator
public ListViewModel(IEventAggregator eventAggregator, IRegionManager regionManager)
{
_eventAggregator = eventAggregator;
_regionManager = regionManager;
}
导航时发布事件
private void OnSendData()
{
_regionManager.RequestNavigate(ShellRegions.LeftRegion, ModuleAUris.Edit);
_eventAggregator.GetEvent<UserEvent>().Publish(_selectedItem);
}
然后订阅even获取对象。
public EditViewModel(IEventAggregator eventAggregator, IRegionManager regionManager)
{
_regionManager = regionManager;
_eventAggregator = eventAggregator;
BackCommand = new DelegateCommand(OnBack);
_eventAggregator.GetEvent<UserEvent>().Subscribe((e) => UserEntity = e);
}
最佳答案
在使用 prism 安装程序下载的 prism 示例中有一个方便的示例;他们使用单独的文件来订阅/取消订阅事件。有桌面版和 Silverlight 版。
它展示了如何创建用于取消订阅事件的 token 。
奥利
关于c# - WPF Prism - 在导航中发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696984/