现在的位置: 首页 > 综合 > 正文

WPF&SL之Basic MVVM

2013年02月27日 ⁄ 综合 ⁄ 共 2510字 ⁄ 字号 评论关闭

转自http://www.cnblogs.com/itkm/archive/2012/03/30/2425732.html

初学MVVM的时候总觉得这玩意老神秘了。然后又莫名其妙的被网络上推荐了Prism框架,搞得乱七八糟,项目差点失去控制。其实学习什么东西都要一步一步的来。因此我今天再次老僧长谈。重提此事,为的是期望对后来者有点帮助。及交流下WPF&SL的开发心得。

 

MVVM的定义

网络上的解释是Model-View-ViewModel的缩写,可是对于一个初学者来说,这玩意真有点难以理解。

注:我智商比较低。

下面我们再用白话解释一次:Model-就是模型(简言之就是数据库的表,或者要显示的元素结构)

View-就是UI,就是用户界面,就是XAML文件。最终显示给用户的效果。

ViewModel—就是控制View的对象,或者对应到代码中就是一个Class。该Class包含:Model或者Model的集合,包含View上的命令(Command)

注意:一般来说对Model的操作(换言之对数据对象的操作),一般放在Command中,界面交互的也可以通过CommandParameter等方式进行交互,如果复杂的话,考虑使用在View中控制。

 

这样一个简单的MVVM就OK了

下面写个简单的例子【未调试只是为了说明问题,所以也不带源码】。

XAML:[View]

<Grid x:Name="LayoutRoot">

<TextBlock Text="{Binding StrName,Mode=OneWay}"></TextBlock>

</Grid>

Model[cs]:

public class XXClassModel:NotificationObject//【这个引用可以直接使用using Microsoft.Practices.Prism.ViewModel;】

{

private string strName;

public string StrName

{

get{return strName;}

set{

strName=value;

RaisePropertyChanged("StrName");//通知界面,注意大小写

//这里还可以做更多的操作,也就是对目标属性赋值的时候执行的操作

}

}

}

ViewModel[cs]:

public class XXClassViewModel:NotificationObject

{

public void XXClassViewModel

{

item=new XXClassModel (){StrName="OK"}

}

private XXClassModel item;

public XXClassModel Item

{

get{return item;}

set{

strName=value;

RaisePropertyChanged("Item");//通知界面

//这里还可以做更多的操作,也就是对目标属性赋值的时候执行的操作

}

}

}

再到View.cs的构造函数中写

this.LayeroutRoot.DataContext=new XXClassViewModel();

至此,全部完成!

 

 

初学MVVM的时候总觉得这玩意老神秘了。然后又莫名其妙的被网络上推荐了Prism框架,搞得乱七八糟,项目差点失去控制。其实学习什么东西都要一步一步的来。因此我今天再次老僧长谈。重提此事,为的是期望对后来者有点帮助。及交流下WPF&SL的开发心得。

 

MVVM的定义

网络上的解释是Model-View-ViewModel的缩写,可是对于一个初学者来说,这玩意真有点难以理解。

注:我智商比较低。

下面我们再用白话解释一次:Model-就是模型(简言之就是数据库的表,或者要显示的元素结构)

View-就是UI,就是用户界面,就是XAML文件。最终显示给用户的效果。

ViewModel—就是控制View的对象,或者对应到代码中就是一个Class。该Class包含:Model或者Model的集合,包含View上的命令(Command)

注意:一般来说对Model的操作(换言之对数据对象的操作),一般放在Command中,界面交互的也可以通过CommandParameter等方式进行交互,如果复杂的话,考虑使用在View中控制。

 

这样一个简单的MVVM就OK了

下面写个简单的例子【未调试只是为了说明问题,所以也不带源码】。

XAML:[View]

<Grid x:Name="LayoutRoot">

<TextBlock Text="{Binding StrName,Mode=OneWay}"></TextBlock>

</Grid>

Model[cs]:

public class XXClassModel:NotificationObject//【这个引用可以直接使用using Microsoft.Practices.Prism.ViewModel;】

{

private string strName;

public string StrName

{

get{return strName;}

set{

strName=value;

RaisePropertyChanged("StrName");//通知界面,注意大小写

//这里还可以做更多的操作,也就是对目标属性赋值的时候执行的操作

}

}

}

ViewModel[cs]:

public class XXClassViewModel:NotificationObject

{

public void XXClassViewModel

{

item=new XXClassModel (){StrName="OK"}

}

private XXClassModel item;

public XXClassModel Item

{

get{return item;}

set{

strName=value;

RaisePropertyChanged("Item");//通知界面

//这里还可以做更多的操作,也就是对目标属性赋值的时候执行的操作

}

}

}

再到View.cs的构造函数中写

this.LayeroutRoot.DataContext=new XXClassViewModel();

至此,全部完成!

 

抱歉!评论已关闭.