首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MVVM组成XAML (Silverlight & WPF)的复杂UI

用MVVM组成XAML (Silverlight & WPF)的复杂UI
EN

Stack Overflow用户
提问于 2011-09-20 19:25:44
回答 1查看 885关注 0票数 1

两个月前,我写了一个基于XAML的应用程序的重新设计(软件设计)。我想我在开发过程中犯了很多架构错误,这导致了应用程序的UI部分难以扩展、维护、代码难以理解的情况。我的应用程序是用MVVM风格的PRISM 4编写的,但是尽管Prism是为模块化设计而发明的,但我的应用程序被证明是非常单一的。我将继续在新设计中使用PRISM 4,但这一次我希望将应用程序的UI部分分解为更小、可重用、可扩展的构建块。

假设我们正在设计数据输入form.Top容器,其中包含保存、取消按钮和TabControl,其中包含包含大量分组输入控件的2-3个选项卡。

与UI设计完全不同的是:静态(编译时),动态(运行时)。静态的,它是在编译之前预定义UI的时候,也就是在XAML中定义列的DataGrid。动态的,当您在运行时组合UI时,即在XAML中定义DataGrid,但在运行时根据用户提升添加列。

当你决定使用哪一种规则时,你使用什么规则,饱和还是动态?在这个特殊的例子中你会选择什么?

下一个大问题是如何将UI分解成碎片。

定义UserControls时使用哪些规则,如何定义此示例表单的UserControls?关于ViewModels,您是为这个示例表单创建单个VM还是创建多个VM(解释)?当ViewModel包含其他ViewModels (不是简单的模型包装,而是包含逻辑的实际VM )时,您会怎么想?

现在最难的问题至少对我来说。扩展UI构建块(UserControls和ViewModels)。

当您需要创建某个表单的副本,但是接口和逻辑稍有不同时,尤其是当您需要在UI中集成授权(权限)时,情况就会非常常见。假设我们需要支持不同版本的out示例表单(不管确切版本有多少,假设2-6版本)。

我可以想到这些解决这个问题的方法:

  1. 从(用户控件和viewModels)创建整体副本,并修改它们(静态方式)。好东西--所有的变体都是独立的、很大的灵活性、没有依赖性、代码重复,如果您需要修改所有变体中的某些内容--您很可能必须在任何地方修改它,特别是使用ViewModels.
  2. Conditional表示时,您可以向您的ViewModel中添加很多条件代码,比如IsThisVisible、IsThatDisabled (动态方式)。好处是最大限度的代码重用,坏事情代码膨胀和混乱。您的代码将很难理解,maintain.
  3. Break UI到非常小的原子UserControls,从这个UI片段组成单独的表单变体,并将ViewModel继承与虚拟成员和重写一起使用。我从来没有使用过ViewModels的继承,我想听听你对这个问题的看法。

其他我想不起来的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-20 19:58:59

根据我的经验,发展道路往往是这样运作的:

  1. 设计了一个混合视图或Kaxaml视图,以及支持视图的视图模型。
  2. 认识到视图的某些部分需要是动态的。在视图模型中实现标志和视图中的样式来显示/隐藏它们。
  3. 意识到所有标志都失控了。去掉标志,重构视图以显示用户控件集合,并重构视图模型以动态填充视图模型集合。

有时候,我事先就知道我需要使用第3种方法,我从一开始就设计它。

但是WPF和MVVM的优点之一是,即使我从一开始就没有为此而设计,如果环境需要的话,朝这个方向移动也不是太难。将一组视图模型属性重构到一个视图模型集合中并不需要花费大量的时间或精力。

不过,我可以告诉你:复制一个XAML对象并对其进行编辑,会在我的脑海中发出klaxons的声音。这是可以想象的情况下,这可能是好的,但这不是赌博的方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7490653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档