WPF - Prism eventAggregator无法正常工作

时间:2018-02-09 08:37:53

标签: c# wpf xaml eventaggregator

我正在尝试学习如何构建WPF应用程序,但在使用EventAggregator类时遇到了一些问题。 现在我有mainWindow.xaml,它看起来像:

<Window.Resources>
    <DataTemplate DataType="{x:Type viewModel:LoginViewModel}">
        <view:LoginView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModel:HomeViewModel}">
        <view:HomeView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModel:ReportViewModel}">
        <view:ReportView/>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ContentControl Content="{Binding BaseViewModel}"/>
</Grid>

所以,我的计划是根据&#39; BaseViewModel&#39;的值来切换视图。属性。 当我需要更改视图时,我发布了一个类似的事件:

User user = session.login(Username, password);
if(user != null)
{
    //publishing the event
     _eventAggregator.GetEvent<OpenNewView().Publish((IBaseViewModel)container.Resolve<IHomeViewModel>());
}

我传递给我应该切换到的课程。上面的示例工作正常,但是当我尝试在另一个视图模型上复制此行为时,有些东西不会触发。这是我再次公开活动的时候:

_eventAggregator.GetEvent<OpenNewView>().Publish((IBaseViewModel)container.Resolve<IReportViewModel>());

但是这不是MainWindowModel上的触发器(当正确执行上面的行时)。在这里,当我订阅活动时:

    //ctor
    public MainViewModel(ILoginViewModel viewModel, IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        eventAggregator.GetEvent<OpenNewView>().Subscribe(OnOpenView);
        BaseViewModel = (LoginViewModel)viewModel;
    }

方法&#39; OnOpenView&#39;从未被执行过。 在这里,我的&#39; OpenNewView&#39;类:

public class OpenNewView : PubSubEvent<IBaseViewModel>
{
}

注意: 以下是我如何声明EventAggregator类(使用Autofac):

builder.RegisterType<EventAggregator>().As<IEventAggregator>().SingleInstance();

所以,我应该有一个实例。

我是WPF世界的新手,所以我不确定我是否遵循了最佳做法。

注2: 我忘了提一件重要的事情: 如果我用:

替换MainWindowViewModel构造函数
    public MainViewModel(IHomeViewModel viewModel, IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        eventAggregator.GetEvent<OpenNewView>().Subscribe(OnOpenView);
        BaseViewModel = (HomeViewModel)viewModel;
    }

对发布 - 订阅开始在我的HomeViewModel上工作。这有点奇怪......

0 个答案:

没有答案