MahApps.Metro的MVVM模式介绍(一)

MahApps.Metro是一个开源的WPF (Windows Presentation Foundation) UI 控件库它的特点有现代化设计主题定制响应式布局内置控件

而Mvvm模式的核心思想是将用户界面(View)与应用程序逻辑(ViewModel)分离,以实现更好的可维护性、可测试性和可扩展性

今天来介绍下MahApps.Metro项目是怎么使用mvvm模式的。

 MainWindow类扮演View角色:

 public partial class MainWindow : MetroWindow{private bool shutdown;private readonly MainWindowViewModel viewModel;private FlyoutDemo? flyoutDemo;public MainWindow(){this.viewModel = new MainWindowViewModel(DialogCoordinator.Instance);this.DataContext = this.viewModel;this.InitializeComponent();}
}

MainWindowViewModel类扮演了ViewModel 角色。

 public class MainWindowViewModel : ViewModelBase, IDataErrorInfo, IDisposable{private readonly IDialogCoordinator _dialogCoordinator;int? _integerGreater10Property = 2;private bool _animateOnPositionChange = true;public MainWindowViewModel(IDialogCoordinator dialogCoordinator){...}
}

先介绍一个单向绑定的属性-Theme列表

在MainWindow.xaml中

 <MenuItem Header="Theme"ItemContainerStyle="{StaticResource AppThemeMenuItemStyle}"<!-- 绑定到“AppThemes”属性,模式为“OneWa”即只从viewmodel向view传递一次数据 -->ItemsSource="{Binding AppThemes, Mode=OneWay}" />
...

在MainWindowViewModel.cs中

// AppThemes 定义为公开的属性拥有get,set访问器public List<AppThemeMenuData> AppThemes { get; set; }
// MainWindowViewModel的构造函数,这这里为AppThemes 填充数据public MainWindowViewModel(IDialogCoordinator dialogCoordinator)
{... this.AppThemes = ThemeManager.Current.Themes.GroupBy(x => x.BaseColorScheme)... .ToList();...
}

通过以上代码,就可以实现在Theme菜单栏里添加多个子菜单项了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/675438.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念&#xff1a;明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能&#xff1a;学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用&#xff1a;通过实际操作&#xff0c;体验Nginx如何提升Web服务的可…

Flutter弹窗链-顺序弹出对话框

效果 前言 弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页&#xff0c;一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出&#xff0c;严重影响用户体验。 如果多个弹窗中又有判断逻辑&#xff0c;根据点击后需要弹出另一个弹窗&#xff0c;这…

Windows10系统中CANoe字体异常问题解决办法

Windows10系统中CANoe/CANalyzer字体异常问题解决办法 一、问题: 在Windows10中文系统中,CANoe/CANalyzer的一些窗口会显示异常的字体,大部分其他窗口的字体却是正常的? 异常的字体如下: 二、问题说明 CANoe/CANalyzer的开发过程中使用了多种对话框技术。一些对话框使…

ADS基础教程10-多态性(动态模型选择)

目录 一、多态性定义二、操作步骤&#xff11;.模型建立&#xff12;.模型选择&#xff13;.执行仿真 一、多态性定义 ADS中支持一个Symbol中&#xff0c;可以同时存在多个子图。在仿真时可以动态选择不同的子图继续宁仿真。 二、操作步骤 &#xff11;.模型建立 在上一章A…

基于springboot+vue+Mysql的教师人事档案管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

代码随想录第52天|300.最长递增子序列 718. 最长重复子数组

300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 给你一个整数数组 nums &#xff0…

RS®ZNLE 矢量网络分析仪

R&SZNLE 矢量网络分析仪 宽频率范围&#xff1a;100 kHz 至 20 GHz 基础测量任务 价值高 独立操作 基础网络分析应用的理想之选 R&SZNLE 矢量网络分析仪易于用户使用&#xff0c;适用于基础测量任务 闻名遐迩的优质设计、创新的用户界面以及紧凑尺寸使 R&…

如果insightface/instantID安装失败怎么办(关于InsightFaceLoader_Zho节点的报错)

可能性有很多&#xff0c;但是今天帮朋友解决问题的时候又收集了一种新的思路。 首先&#xff0c;可以先按照这篇文章里边提到的方法去安装&#xff1a; 【全网最详细】ComfyUI下&#xff0c;Insightface安装指南-聚梦小课堂_insightface如何安装-CSDN博客 其次&#xff0c;…

前端之深拷贝

前提&#xff1a; 就是在实际开发中&#xff0c;我有一个编辑的弹窗&#xff0c;可以查看和编辑&#xff0c;因为弹窗里面是一个步骤条&#xff0c;点击下一步就要向对应的接口发送请求&#xff0c;考虑到就比如我点击下一步&#xff0c;此次表箱信息其实不需要修改&#xff0…

迅为RK3568开发板资料说明4750+页专属文档专为3568编写

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

安装nginx-1.25.5与ngx_http_headers_more_filter_module模块

#下载nginx的代码 curl -O http://nginx.org/download/nginx-1.25.5.tar.gz #下载headers-more-nginx-module代码 git clone https://github.com/openresty/headers-more-nginx-module#解压 tar -xzf nginx-1.25.5.tar.gzcd nginx-1.25.5#--add-dynamic-module 下载下来的目录 …

不上班,我靠这5份赚钱副业养活了自己

在这个快节奏的社会里&#xff0c;很多人都在为生活奔波忙碌。今天&#xff0c;就让我来跟大家分享一下我的“躺平”秘籍吧&#xff01; 这一个月来&#xff0c;我没有上班&#xff0c;但好在有副业养活自己。有时候&#xff0c;我真的觉得有一份自己喜欢的自媒体副业挺好的。…