- 在
RazorViews\SecondView.razor的OnInitialized()方法里订阅业务消息通知:
@using WPFBlazorChat.Messages<MApp><MToolbar><MTabs BackgroundColor="primary" Grow Dark><MTab><MBadge Color="pink" Dot>Item One</MBadge></MTab><MTab><MBadge Color="green" Content="tagCount">Item Two</MBadge></MTab><MTab><MBadge Color="deep-purple accent-4" Icon="mi-masa">Item Three</MBadge></MTab></MTabs></MToolbar><MRow><MButton class="mx-2" Fab Dark Large Color="purple" OnClick="ReponseMessage"><MIcon>mdi-android</MIcon></MButton></MRow></MApp>@code{private int tagCount = 6;protected override void OnInitialized(){// 订阅业务消息,在主窗口点击桃心按钮时触发Messenger.Default.Subscribe<SendRandomDataMessage>(this, msg =>{this.InvokeAsync(() => { this.tagCount = msg.Number; });this.StateHasChanged();}, ThreadOption.UiThread);}void ReponseMessage(){// 通知主窗体,我已经收到消息,请不要再发Messenger.Default.Publish(this, new ReceivedResponseMessage(this));}}注意看,上面收到消息时有两个方法要简单说一下,看
OnInitialized()里的代码:
- InvokeAsync:将
Number赋值给变量tagCount的代码是在InvokeAsync方法里执行的,这个和WPF里的Dispatcher.Invoke是一个意思,相当于接收数据是在子线程,而赋值这个操作会即时的绑定到<MBadge Color="green" Content="tagCount">上,就需要UI线程同步 。 - StateHasChanged:相当于WPF MVVM里的
PropertyChanged事件通知,通知UI这里有值变化了,请你刷新一下,我要看看最新值 。
上面的代码把子窗体消息回应也贴上了,即点击安卓图标按钮时发送了
ReceivedResponseMessage消息,在主窗体
RazorViews\MainView.razor里也订阅了这个消息,和上面的代码类似:
...<!--确认对话框开始--><PConfirm Visible="_showComfirmDialog"Title="子窗体来回应了"Type="AlertTypes.Warning"OnCancel="() => _showComfirmDialog = false"OnOk="() => _showComfirmDialog = false">说你别没事一直发,它们烦!</PConfirm><!--确认对话框结束--></MApp>@code{... // 是否显示确认对话框bool _showComfirmDialog; protected override
经验总结扩展阅读
-
泡沫说情感|心理学:凭感觉选一朵蘑菇,测你未来会靠什么发家致富?
-
-
熊猫医学社|40岁男子转氨酶280,确诊肝硬化,医生咆哮:3个习惯,是“祸根”
-
2023年农历八月初四宜认干儿子吗 2023年9月18日认干儿子好不好
-
-
-
-
马丽|马丽也逃不过“中年发福”?穿白衬衫身材圆润不少,连气质都变了
-
-
2022年农历九月廿三祭祀灶神吉日 2022年10月18日适合祭祀灶神吗
-
-
2022年12月3日求神拜佛好吗 2022年12月3日求神拜佛好不好
-
-
-
-
-
我是文食肆|人生不顺时,默念三句话,你会越来越强大!
-
-
鲍里斯·约翰逊|乌克兰本已准备好和谈,却遭英前首相约翰逊竭力阻拦
-