c# - WPF Prism - 在导航中发送对象

标签 c# wpf mvvm prism unity-container

我正在使用 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/

相关文章:

c# - 如何在同一 View 中使用两个从两个不同模型创建的 ActionResult?

c# - Monotouch 动态追加记录到 UItableview

c# - 无法在 C# 资源文件中插入 unicode 符号

c# - wpf 窗口 (ui) 被长时间渲染操作阻塞 - 可以使用后台线程进行渲染吗?

wpf - 如何设置用户控件的数据上下文

c# - NotifyIcon 是否具有 MouseDown 等效项?

c# - 为什么我在同一台计算机上通过 IIS 和 Visual Studio 的 Web 服务器运行我的应用程序时得到不同的日期格式?

wpf - 如何在MVVM中实现分页?

c# - WPF Caliburn.Micro 和 TabControl - 更改选项卡,不更改模型

c# - WPF AvalonDock 添加文档