最近要写WPF技术的项目,所以要学习一下关于WPF的知识…今天呢了解了一下MVVM的知识,具体内容如下了…
MVVM呢是Model-View-ViewModel的缩写了…MVVM的由来算是有MVP(Model-View-Presenter)模式与WPF的结合新型架构框架了,它立足于原有MVP框架并且把WPF的新特性揉合进去,以应对客户日益复杂的需求变化…
MVVMLight呢算是MVVM他是MVVM的一种实现,当然还有其他的其它的实现了(例如微软的Prism),但现在MVVMLight是一个公认的比较好的一种实现了…
下面介绍一下MVVMLight的安装方法了…
我比较喜欢从Visual Studio中的NuGet Package中来获取MVVMLight了,如果想安装MVVMLight Toolkit请自行度娘或谷姐…
首先呢从Visaul Studio中的工具菜单项打开 扩展管理器,然后再搜索栏中输入 NuGet Package进行搜索…
然后安装NuGet Package,如果已经安装过的可以直接跳过进行下一步了…NuGet Package不是必须安装的了,也可以直接安装MVVMLight了,但是安装了NuGet Package以后,它可以使你的MVVMLight保持到最新版本了,当有更新的时候呢会自动有更新提示了…推荐使用了…
安装完NuGet Package后,然后再在 解决方案 右键选择 管理NuGet程序包 中搜索MVVMLight进行安装…至此MVMMLight就安装完成了…以后如果那个项目需要使用MVVMLight库就只要在 管理NuGet程序包中进行一次MVVMLight安装就可以了…
下面写段代码使用一下MVVMLight了…
建立项目MVVMLightTest…然后在项目中添加类Song,类中代码如下…
1: ///2: /// Model of a 'song'.3: ///4: public class Song5: {
6: #region Members7: string _artistName;8: string _songTitle;9: #endregion10:
11: #region Properties12: ///13: /// The artist name.14: ///15: public string ArtistName16: {
17: get { return _artistName; }18: set { _artistName = value; }19: }
20:
21: ///22: /// The song title.23: ///24: public string SongTitle25: {
26: get { return _songTitle; }27: set { _songTitle = value; }28: }
29: #endregion30: }
然后再添加类SongViewModel,类中代码如下…
1: ///
2: /// This class is a view model of a song.
3: ///
4: public class SongViewModel:ObservableObject
5: {
6: #region Construction
7: ///
8: /// Constructs the default instance of a SongViewModel
9: ///
10: public SongViewModel()
11: {
12: _song = new Song { ArtistName = "Unknown", SongTitle = "Unknown" };
13: }
14: #endregion
15:
16: #region Members
17: Song _song;
18: int _count = 0;
19: #endregion
20:
21: #region Properties
22: public Song Song
23: {
24: get
25: {
26: return _song;
27: }
28: set
29: {
30: _song = value;
31: }
32: }
33:
34: public string ArtistName
35: {
36: get { return Song.ArtistName; }
37: set
38: {
39: if (Song.ArtistName != value)
40: {
41: this.Song.ArtistName = value;
42: RaisePropertyChanged("ArtistName");
43: }
44: }
45: }
46: #endregion
47:
48: #region Commands
49: void UpdateArtistNameExexute()
50: {
51: ++_count;
52: ArtistName = string.Format("Elvis ({0})", _count);
53: }
54: bool CanUpdateArtistNameExecute()
55: {
56: return true;
57: }
58: public ICommand UpdateArtistName
59: {
60: get
61: {
62: return new RelayCommand(UpdateArtistNameExexute, CanUpdateArtistNameExecute);
63: }
64: }
65: #endregion
66: }
然后再MainWindow.xaml中添加以下代码…
1: <Window.DataContext>
2:
3: <local:SongViewModel />
4: Window.DataContext>
5: <Grid>
6: <Grid.RowDefinitions>
7: <RowDefinition Height="Auto" />
8: <RowDefinition Height="Auto" />
9: <RowDefinition Height="Auto" />
10: Grid.RowDefinitions>
11: <Grid.ColumnDefinitions>
12: <ColumnDefinition Width="Auto" />
13: <ColumnDefinition Width="Auto" />
14: Grid.ColumnDefinitions>
15: <Label Grid.Column="0" Grid.Row="0" Content="Example 1 - this doesn't work!" />
16: <Label Grid.Column="0" Grid.Row="1" Content="Artist: " />
17: <Label Grid.Column="1" Grid.Row="1" Content="{Binding ArtistName, Mode=TwoWay}" />
18: <Button Grid.Column="1" Grid.Row="2" Name="ButtonUpdateArtist" Content="Update Artist Name" Command="{Binding UpdateArtistName}"/>
19: Grid>
然后生成并运行程序…效果如下
此程序虽然功能狠狠简单,但是它却体现出了MVVM的思想…程序中的所有业务逻辑放在了ViewModel中,在MainWindow的.cs文件中未添加任何代码…只需在MainWindow.xaml中进行数据和命令的绑定即可…