博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Silverlight中使用MVVM

Posted on 2010-08-20 17:55  雷雷  阅读(585)  评论(2编辑  收藏  举报

今天在园子看到一篇关于MVVM的文章,顺便实践了下,代码如下:

Model:

 

public class Person
{
public int age { get; set; }
public string name { get; set; }
}

 

 

 

代码
using System.ComponentModel;
using System.Collections.ObjectModel;
public class Persons
{
public List<Person> person;
public List<Person> getPerson()
{
person
= new List<Person>()
{
new Person{name="Yuanyuan",age=23},
new Person{name="Yoyo",age=28},
new Person{name="Me",age=30}

};
return person;
}
}

ViewModel:

 

代码
using sl20100820.Model;
using System.Collections.Generic;
using System.ComponentModel;
using System.Collections.ObjectModel;
public class PageViewModel:INotifyPropertyChanged
{
public List<Person> Human { get; set; }
public PageViewModel()
{
Human
= new Persons().getPerson();
}
private Person _getOnePerson;
public Person GetOnePerson
{
get { return _getOnePerson;}
set {_getOnePerson=value;
if(PropertyChanged !=null)
{
PropertyChanged(
this,new PropertyChangedEventArgs("GetOnePerson"));

}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}

 

 

View:

 

代码
<UserControl x:Class="sl20100820.View.PageView"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
d:DesignHeight
="300" d:DesignWidth="400" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data">

<Grid x:Name="LayoutRoot" Background="White">
<data:DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Human}" SelectedItem="{Binding GetOnePerson,Mode=TwoWay}"
Height
="200" HorizontalAlignment="Left" Margin="41,65,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" />
<TextBox Text="{Binding GetOnePerson.age,Mode=OneWay}" Height="23" HorizontalAlignment="Left" Margin="247,149,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<TextBox Text="{Binding GetOnePerson.name,Mode=OneWay}" Height="23" HorizontalAlignment="Left" Margin="247,191,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />

</Grid>
</UserControl>

 

MainPage

 

代码
<UserControl x:Class="sl20100820.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:model
="clr-namespace:sl20100820.ViewModel" xmlns:view="clr-namespace:sl20100820.View"
d:DesignHeight
="300" d:DesignWidth="400">

<UserControl.Resources>
<model:PageViewModel x:Key="page"/>
</UserControl.Resources>
<Grid Name="gridView1" Background="White" DataContext="{StaticResource page}">
<view:PageView></view:PageView>
</Grid>
</UserControl>

 

 

View in browser: