Prism/Unity を使用して WPF/MVVM アプリケーションを作成しています。領域をナビゲートするときに、あるユーザー コントロールから別のユーザー コントロールにデータを転送する方法に問題があります。
私は地域を持っています
これは、グリッドのみを含むユーザー コントロール ("ContactsList") によって入力されます。このグリッドは、ItemsSource および SelectedItem によってバインドされます。
ContractEdit に移動し、SelectedItem にバインドされた Contact を渡したいです。
LocalRegionManager.RequestNavigate(ContactRegions.MainRegion, ContactsUri.ContactsEdit);
Datacontext または Uri で単一の値を渡すことができますが、リスト ビュー モデルにアイテム全体が既にある場合、データを取得するためにデータベースに戻る必要はありません。
リスト ユーザー コントロールからエディット コントロールにオブジェクト全体を渡すにはどうすればよいですか?
前もって感謝します。
結論
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);
}
次に、イベントをサブスクライブしてオブジェクトを取得します。
public EditViewModel(IEventAggregator eventAggregator, IRegionManager regionManager)
{
_regionManager = regionManager;
_eventAggregator = eventAggregator;
BackCommand = new DelegateCommand(OnBack);
_eventAggregator.GetEvent<UserEvent>().Subscribe((e) => UserEntity = e);
}