私は2つのビューモデルを持つWPFで自分のコードを書いています。 1つのビューモデルでは、私は、プリズムにポップアップウィンドウを閉じていますし、近くに私のような私の出版メソッドを呼び出しています:Prism - 公開されたイベントが購読されていない
public ResidentListViewModel(IResidentService residentService, IUserService userService, IEventAggregator eventAggregator)
{
var res = eventAggregator.GetEvent<PubSubEvent>().Subscribe(InitializeCollectionView);
_residentService = residentService;
_userService = userService;
_eventAggregator = eventAggregator;
InitializeCollectionView();
//***The InteractionRequest class
FormDialogOpenRequest = new InteractionRequest<INotification>();
ConfirmationRequest = new InteractionRequest<IConfirmation>();
//*** Commands for each of the buttons
RaiseFormDialogOpenCommand = new DelegateCommand<object>(this.RaiseFormDialogOpen);
aiseConfirmationCommand = new DelegateCommand<object>(this.RaiseConfirmation);
}
ここではどのように両方です:私のイベントをサブスクライブは、このように書きながら
private void OnCancelInteraction()
{
_eventAggregator.GetEvent<PubSubEvent>().Publish();
this.FinishInteraction();
}
これらのクラスのイベントアグリゲータを受けている。ここで
UnityContainer container = new UnityContainer();
var aggregator = container.Resolve<EventAggregator>();
this.DataContext = new ResidentFormDialogViewModel(residentService, userService, unitService, aggregator);
は私の第二のクラスです:
UnityContainer container = new UnityContainer();
var aggregator = container.Resolve<EventAggregator>();
DataContext = new ResidentListViewModel(residentService, userService, aggregator);
私のインタラクションをキャンセルするたびに、公開は公開されますが、ResidentListViewModel
はサブスクライブとして呼び出されていません。
ResidentListViewModel
は、subscribeメソッドを持つ他のクラスの前に呼び出されています。それは問題ではありますか?私が望むのは、MVVMパターンを破ることなくインタラクションが終了するたびにコレクションビューを初期化することだけです。それ以外の方法があればお勧めします。
@NaveedZahoor UnityContainerがEventAggregatorの2つのインスタンスを各クラスに与えているのが分かります。 eventAggregatorをシングルトンとして構成する必要があります。たとえば、 –
を使用すると、次のようになります。container.RegisterType(new ContainerControlledLifetimeManager());また、静的メソッドを使用してEventAggregatorのシングルトンインスタンスを提供するクラスを使用することもできます。 –
はい、あなたは正しいです。ありがとう –