今天在园子看到一篇关于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:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库