技术开发 频道

.NET实践:WPF/Silverlight中MWM运用

  4,第四步

  第四步很重要,Winform中不像WPF和Silverlight那样灵活且没有那么多的延伸特性和附加功能,所以只能通过外界代码的方式手动绑定View和ViewModel

using System;using System.Reflection;using System.Windows.Forms;using MVVMInWinForm.Attribute;namespace MVVMInWinForm{    
static class Program    
{        
[STAThread]        
static void Main()        {          
Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(
false);          
  Initialize();      
}      
private static void Initialize()        {          
Type t
= typeof(Form1);      
  
//通过Type获取Attributes的值    
object[] attributes = t.GetCustomAttributes(typeof(ViewModelAttribute),
false);      
//如果ViewModelAttribute的Activated值为true,把相关的View和ViewModel关联起来,否则不关联            if (attributes.Length > 0 && (attributes[0] as ViewModelAttribute).Activated == true)          
  {              
Form1 form1
= new Form1();                ViewModel viewModel = new ViewModel(form1);        
    }          
  
else        
   {              
Application.Run(
new Form1());      
     }      
}        
}
}

   5,第五步

  第五步我们需要给Form1类加上一个Attribute,其目的是增加View和ViewModel的灵活性,使他们可以松散耦合、灵活配置,如下代码:

using System;using System.Windows.Forms;
using MVVMInWinForm.Attribute;namespace MVVMInWinForm{    
//通过Attributes的方式来标记,true表示关联,false表示不关联,具体由主程序控制    
[ViewModel(
true)]    
public partial class Form1 : Form    
{      
public Form1()      
  {          
InitializeComponent();      
}  
}
}

   现在我们就可以运行程序,在两个输入框分别输入中文名字和英文名字,然后按下“显示”按钮,就得到如下的结果:

  [ViewModel(true)] 上面执行的结果是正确的,那么现在改为[ViewModel(false)] 呢? 先看下面代码和运行效果:

//通过Attributes的方式来标记,true表示关联,false表示不关联,具体由主程序控制
[ViewModel(
false)]
public partial class Form1 : Form
{  
public Form1()  
  {        
InitializeComponent();
   }
}

 

  执行的结果是没有命令被触发, 因为View Model 没有被激活,也就是说View和ViewModel没有进行关联。 在ASP.NET中实现此模式我就不多进行阐述了,如果大家有兴趣也可以做一个Demo试试,原理基本一样。

  六.本文总结:

  今天我们从MVVM基本介绍讲起,然后概览了我们在WPF/Silverlight项目中如何使用这个模式以及在WinForm/ASP.NET上的使用实践,通过今天的这篇文章,我个人觉得MVVM模式是WPF/Silverlight下的产物,所以运用起来也非常得心应手,在其他平台上使用有诸多局限。在WinForm/ASP.NET上的使用并不能带来什么好处,反而增加了工作量和成本系数,所以我个人还是不太推荐这样使用,不知道大家有什么看法,写篇文章也是怀着技术交流的心态发布出来,由于是自己对这些技术的使用总结和心得体会,错误之处在所难免,所以希望大家能够多多指点,这样也能纠正我的错误观点,以便和各位共同提高!

  由于思维发散的缘故,每写一篇文章,从构思到Demo和文章前后要几天时间,不知道大家在写文章有这样的体会没有,也许是自己知识浅薄的缘故才会这样吧。最后如果大家感兴趣,也可以关注WPF 基础到企业应用系列索引这个系列文章,我也会不定期的逐渐更新,谢谢各位的关注,也欢迎和各位交流讨论。

0
相关文章