2

我正在使用 Prism/Unity 编写 WPF/MVVM 应用程序。在导航区域时,我遇到了如何将数据从一个用户控件传输到另一个用户控件的问题。

我有一个地区

这由仅包含网格的用户控件(“ContactsList”)填充,该网格由 ItemsSource 和 SelectedItem 绑定。

我想导航到 ContractEdit 并将绑定到 SelectedItem 的联系人传递。

LocalRegionManager.RequestNavigate(ContactRegions.MainRegion, ContactsUri.ContactsEdit);

我可以在 Datacontext 或 Uri 中传递单个值,但是当我已经在列表视图模型中拥有整个 Item 时,我不想返回数据库来获取数据。

如何将整个对象从列表用户控件传递到编辑控件?

提前致谢。

结论

我添加了 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);
    }
4

2 回答 2

0

您可以拥有一个 NavigationManager,它将知道当前联系人是什么。例如,您只需在 NavigatedFrom 和 NavigatedTo 或其他地方设置并获取它。只要 CurrentContact 是一个 IContact,它就可以在它自己的模块中或在核心项目中。

您还可以在列表模块中有一项服务,该服务将从其他模块访问当前联系人。

如果 te NavigationManager 没有其他用途,该服务可能更合适。

编辑

这些服务在 msdn 上进行了解释。

于 2013-05-22T16:54:14.087 回答
0

使用 prism 安装程序下载的 prism 示例中有一个方便的示例;他们使用单独的文件订阅/取消订阅事件。有桌面版和 Silverlight 版。

它还展示了如何创建用于取消订阅事件的令牌。

奥利

于 2013-05-24T11:30:48.073 回答