您现在的位置:首页 > 新闻资讯 >

新闻资讯

6 开发基于WPF的摩登三维工业软件- MVVM

[编辑:永太净化设备经营部] [时间:2022-04-01]

  摩登3注册由内容质量、互动评论、分享传播等多维度分值决定,勋章级别越高(

  原标题:.NET 6 开发基于WPF的摩登三维工业软件- MVVM

  相比MFC、WinForms等传统的界面库,基于WPF开发界面有一个很大的优势:我们可以很方便地基于MVVM设计模式愉悦地开发应用。

  MVVM模式有哪些好处,有哪些优势?本文从应用的角度,通过实现一个三维参数化管材创建界面带大家来体验一下。

  网上有若干对MVVM的介绍,在此不做过多的赘述。我们将从具体的是应用案例与大家一起来体会MVVM的优势,即实现UI部分的代码与核心业务逻辑、数据模型分离,达到高耦合低内聚的软件架构目标。

  我们希望打开一个对话框,在其中可以显示管材模型;修改管材的参数能够实时看到管材形状的变化。如下图所示:

  其中管子的外径由管子的内径加上管子壁厚,不需要用户输入。当然也可以实现用户修改外径,减掉管壁来得到内径。这个可以根据业务需要来调整。

  基于MVVM设计模式,我们实现这样的类设计:

  SectionBarVM实现ViewModel层,即View和Model的桥梁,业务逻辑检查,比如半径不能小于0,壁厚不能小于0等。

  我们采用自底向上的实现顺序,逐步实现Model、ViewModel和View。

  由于是基于AnyCAD内置的组件,可以直接略过。ShapeElement 可以用来保存TopoShape对象外,可以保存用户自定义的参数。比如管材的长度、内径、厚度等。重点关注以下方法:

  SectionBarVM从INotifyPropertyChanged继承,获得PropertyChanged的能力。当数据有更新的时候,可以精确地通知View层说:“嗨,兄弟,我的这个属性更新了,您该更新界面啦!

  基于属性机制实现。当外部更新,会调用属性set方法的时候,对数据进行合法检查。若符合要求,更新Model,并调用OnPropertyChanged发起通知。

  把ViewModel对象设置给Window的DataContext属性,即可实现UI与ViewModel的关联。另外我们希望更改数据后也能更新三维窗口,在这里我们先用比较笨的办法实现,即硬编码实现参数与三维模型的联动。详见SbVM_PropertyChanged方法的实现。

  我们先暂时在草图插件项目SketchPlugin中增加一个按钮,用来调用创建型材对话框的入口:

  本文从底层Model出发,逐步实现了ViewModel和View层。从实现的代码结构来看,基于MVVM模式的程序确实可以让代码层次清楚,业务逻辑与界面分离,让界面类不再臃肿不堪。Microsoft设计XAML之初的一个目标是希望做UI布局的UX与写代码逻辑的开发能够分工协作,甚至为此开发了独立的设计工具Blend给UX使用,以让开发能够直接重用UX实现的XAML…… 虽然现实并没有Microsoft想象的那么美好,但把界面布局和核心业务逻辑分离,除了让程序变得更容易维护之外,我们还可以把功能分给不同资历水平的程序员来开发, 节约项目开发成本。

  .NET 6 基于WPF的摩登三维工业软件:暗黑风格界面

  .NET 6 基于WPF的摩登三维工业软件:轻量级界面框架

  推荐关注「DotNet」,提升.Net技能

  点赞和在看就是最大的支持❤️返回搜狐,查看更多