2

所以..我有一些核心课程。当它正在加载一些模块时,我正在尝试使用 EventAggregator.GetEvent().Publish() 向状态窗口发送一些通知。状态窗口显示:

private Core()
        {
            SystemManager.EventAggregator.GetEvent<StartProgressWindow>().Publish(null);
            this.InitializeCore();
        } 

StartProgressWindow 是启动状态窗口事件的地方,InitializeCore 方法是加载所有模块的地方。

状态通知发送:

Core.EventAggregator.GetEvent<ChangeProgressStatus>().Publish("Some module is loading");

和订户:

eventAggregator.GetEvent<ChangeProgressStatus>().Subscribe((message) =>
                {
                    this.Status = message;
                });

状态属性:

public string Status 
        {
            get
            {
                return status;
            }
            set
            {
                this.status = value;
                RaisePropertyChanged("Status");
            }
        }

捆绑:

<Label Content="{Binding Status, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>

而且,实际上,问题是:

属性随我发送到的所有状态而变化。但它并没有反映在 UI 上,它是 forzen。我在 ViewModel 类的构造函数中将 Status-property 的值设置为“Some string”,当然它反映得很好。我做错了什么?谢谢,帕维尔!

4

2 回答 2

0

我怀疑这是因为您的所有事件都与方法同时处理,所以在所有事件和方法完成InitializeCore()之前它实际上不会渲染任何东西InitializeCore()

然后尝试StartProgressWindow在较低的DispatcherPriorityRender上启动您的事件,例如DispatcherPriority.Background

private Core()
{
    this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new Action(delegate 
        { 
            SystemManager.EventAggregator.GetEvent<StartProgressWindow>().Publish(null);
        }));

    this.InitializeCore();
} 
于 2012-07-03T12:39:45.380 回答
0

您是否尝试过确保订阅 UI 线程?

eventAggregator.GetEvent<ChangeProgressStatus>().Subscribe((message) =>
                {
                    this.Status = message;
                }, ThreadOption.UIThread);
于 2012-07-03T10:50:57.927 回答