有兴趣的看上面的代码,封装代码上面简单全部给上,后面的消息通知都是基于上面的三个类实现的,比较核心 。
5.2 代码整理第 5 节涉及到多窗体及多Razor组件了,需要创建一些目录存放这些文件,方便分类管理 。

文章插图
- A:放
Message,即一些消息通知类;
- B:放
Razor组件,如果需要与Maui\Blazor Server(Wasm)等共享Razor组件,可以创建Razor类库存储;
- C:放通用服务,这里只放了一个窗体管理静态类,实际情况可以放
Redis服务、RabbitMQ消息服务等;
- D:放
WPF视图,本示例WPF窗体只是一个壳,承载BlazorWebView使用;

文章插图
图中有三个操作:
- 点击主窗体A的【+】按钮,发送了
OpenSecondViewMessage消息,打开子窗体B; - 打开子窗体B后,再点击主窗体A的【桃心】按钮,发送了
SendRandomDataMessage消息,子窗体B的第二个TabItem Header显示了消息传来的数字; - 点击子窗体B的【安卓】图标按钮,给主窗体A响应了消息
ReceivedResponseMessage,主窗体收到后弹出一个对话框 。
public class OpenSecondViewMessage : Message{public OpenSecondViewMessage(object sender) : base(sender){}}public class SendRandomDataMessage : Message{public SendRandomDataMessage(object sender, int number) : base(sender){Number = number;}public int Number { get; set; }}public class ReceivedResponseMessage : Message{public ReceivedResponseMessage(object sender) : base(sender){}}除了SendRandomDataMessage传递了一个业务Number属性,另两个消息只是起到通知作用(所以没有额外属性定义),实际开发时可能需要传递业务数据 。5.3.1 打开多窗体即上面的第一个操作:点击主窗体A的【+】按钮,发送了
OpenSecondViewMessage消息,打开子窗体B 。在
RazorViews\MainView.razor中执行按钮点击,发送打开子窗体消息:...<MCol><MButton class="mx-2" Fab Dark Color="indigo" OnClick="OpenNewSecondView"><MIcon>mdi-plus</MIcon></MButton></MCol>...@code{...void OpenNewSecondView(){ Messenger.Default.Publish(this, new OpenSecondViewMessage(this));}...}在App.xaml.cs里订阅打开子窗体消息:public partial class App : Application{public App(){// 订阅打开子窗口消息,在主窗口点击【+】按钮Messenger.Default.Subscribe<OpenSecondViewMessage>(this, msg =>{var chatWin = new SecondWindowView();chatWin.Show();}, ThreadOption.UiThread);}}实际开发可能情况更复杂,发送的消息OpenSecondViewMessage里带WPF窗体路由(定义的一套路径规则寻找窗体或ViewModel),订阅的地方也可能不在主程序,在子模块的Module类里 。5.3.2 发送业务数据即第二个操作:打开子窗体B后,再点击主窗体A的【桃心】按钮,发送了
SendRandomDataMessage消息,子窗体B的第二个TabItem Header显示了消息传来的数字 。- 在
RazorViews\MainView.razor中执行按钮点击,发送业务消息(就当前时间的Millisecond):
...<MCol><MButton class="mx-2" Fab Small Dark Color="pink" OnClick="SendNumber"><MIcon>mdi-heart</MIcon></MButton></MCol>...@code{...void SendNumber(){ Messenger.Default.Publish(this, new SendRandomDataMessage(this, DateTime.Now.Millisecond));}...}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 高铁能带1000ml的洗发水吗
- 宽带网络电视怕打雷吗
- 藕粉颗粒状的好还是粉状的
- 裙带菜泡发后可以直接吃吗
- 水质检测多少数值合格
- 蛋糕粉做馒头要不要加酵母
- 钠钙玻璃杯能倒开水吗
- 洗衣机怎么清理里面的脏东西
- 五仁馅料怎么做更松软
- 煮带壳花生放什么调料
