今天在园子看到一篇关于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: