WPF中使用MVVM模型进行数据绑定
创始人
2024-02-14 18:23:48
0

文章目录

  • 前言
  • 一、声明一个类用来实现接口 INotifyPropertyChanged
  • 二、实例化ViewModel对象
    • 1.新建MainViewModel模型类
    • 2.实例化对象
  • 三、在界面设计代码中进行绑定
  • 四、应用


前言

WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法:
我们可以先在项目下新建几个目录:Core、Models、ViewModels
在这里插入图片描述


一、声明一个类用来实现接口 INotifyPropertyChanged

在Core文件夹新建类文件:NotifyPropertyObject .cs
示例代码如下

public class NotifyPropertyObject : INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propertyName){if(PropertyChanged != null){PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));}}}

二、实例化ViewModel对象

1.新建MainViewModel模型类

在ViewModels文件夹新建类文件:MainViewModel .cs
示例代码如下

public class MainViewModel: NotifyPropertyObject
{private int _MyValue;public int MyValue{get { return _MyValue; }set{ _MyValue = value;OnPropertyChanged("MyValue");}}public List StrList { get; set; }public MyStudent MyStudent { get; set; }public MainViewModel(){MyStudent = new MyStudent();StrList = new List() { "1","2","3","4","5"};}}

2.实例化对象

在App.xaml.cs中编辑
代码如下(示例):

public static ViewModels.MainViewModel MainViewModel { get; private set; }public App()
{MainViewModel = new ViewModels.MainViewModel();
}

在主界面后台代码中声明ViewModel

public partial class MainWindow : Window
{public ViewModels.MainViewModel ViewModel { get { return App.MainViewModel; } }public MainWindow(){InitializeComponent();this.DataContext = ViewModel;this.Loaded += MainWindow_Loaded;}
}

为每一个界面建立其模型类,如MainViewModel,AzimuthWindowVM…,此种类型的类同样需继承自类NotifyPropertyObject
注意:(1)此类中主要添加后台的实现代码,其一是使后台代码尽可能简单;其二是便于数据的绑定(2)此类中大多数情况下写的是属性和方法


三、在界面设计代码中进行绑定

.xaml文件




四、应用

后台代码:

 private void Button_Click(object sender, RoutedEventArgs e){Console.WriteLine(ViewModel.MyValue);ViewModel.MyValue = 20;//OneWayToSource ----编辑框编辑值时 ViewModel.MyValue可以获取到值,但是ViewModel.MyValue改变时,binding的编辑框无法更改//OneWay         ----编辑框编辑值时 ViewModel.MyValue值无法更新。但是ViewModel.MyValue改变时,binding的编辑框更新了//TwoWay         ----编辑框编辑值时 ViewModel.MyValue可以获取到值,且ViewModel.MyValue改变时,binding的编辑框也更新了//对于OneWay绑定:在界面中显示的数据可以随数据源的值的变化而变化,但更改界面的数据不会影响到数据源。//对于TwoWay绑定:界面中显示的数据及数据源的数据可以双向显示及更新。//对于OneWayToSource绑定:初始时界面的数据为空;更改界面的数据可以影响数据源的值,但是更改数据源的值不会体现在界面上。//对于OneTime绑定:在界面中显示的为数据源的初始值,更改数据源的值的时候,不会更改界面的数据显示;更改界面的数据也不会影响到数据源的数据。//UpdateSourceTrigger 属性的角色://PropertyChanged:当绑定目标属性更改时,立即更新绑定源。//LostFocus:当绑定目标元素失去焦点时,更新绑定源。//Explicit:仅在调用 UpdateSource 方法时更新绑定源。//注释:多数依赖项属性的UpdateSourceTrigger 值的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus。}private void Button_Click1(object sender, RoutedEventArgs e){Console.WriteLine(ViewModel.MyStudent.Age);}

相关内容

热门资讯

怎样与陌生人聊天技巧 怎样与陌生人聊天技巧  同陌生人交谈是口语交际中的一大难关,处理得好,可以一见如故,相见恨晚;处理得...
学员培训感言 学员培训感言(通用12篇)  在平凡的学习、工作、生活中,我们难免会萌生一些新的感悟,这时写感言是一...
光棍节经典励志语录   大河向东流啊,人间的光棍去泡妞啊,说走咱就走啊,你走我走全都走啊!路见对象一声吼啊,看上我就跟我...
老同学聚会经典感言精选   岁月匆匆,转眼毕业已经多年,多年后再聚首,大家又会有什么感言呢?今天CN人才小编为大家收集整理的...
肖骁奇葩说经典语录   1、我都娘成这样了还不想aa制,你个大老爷们儿还想aa制!  2、如果给我大城市的一张床,我有信...
辰东的语录 辰东的语录  在日常生活或是工作学习中,许多人对一些广为流传的语录都不陌生吧,语录是对某些事理进行高...
聂鲁达经典语录   导语:我喜欢你是寂静的,仿佛你不在这山河岁月里。你从远处聆听我,我的声音却无法触及你。以下是小编...
于丹经典爱情语录   全世界的人都离开你了我也会在你身边,有地狱我们一起猖獗。  1. 因为我知道你是个容易担心的小孩...
端午节安康问候语 端午节安康问候语  在日常学习、工作抑或是生活中,许多人都写过问候语吧,问候语可以传达对他人的关切和...
体育教师获奖感言   体育教师获奖感言一  尊敬的各位领导、来宾、同学们大家下午好:  我是来自上海市建平实验中学的王...
运动会获奖感言 运动会获奖感言1、从今早开始,我就一直忙于这边的工作,处理七七八八的小事。 我认为自己在后勤工作方面...
人生感言语录 精选人生感言语录40句  腾不出时间来睡觉的人,迟早会腾出时间来生病;腾不出时间来复习的人,迟早会腾...
川端康成经典语录 川端康成经典语录  在平平淡淡的日常中,大家都经常接触到语录吧,语录具有短小简约,不重文彩的特点。什...
树上春树爱情语录 树上春树爱情语录  在日常学习、工作或生活中,大家都接触过很多有名的语录吧,语录具有篇幅简短,语言精...
高中生班主任寄语 高中生班主任寄语(精选130句)  在平日的学习、工作和生活里,大家都尝试过写寄语吧,寄语是所传的话...
三生三世菩提树下经典语录 佛...   生即死,死亦生,生死不由于命,物定亦胜天,佛本道,道亦佛,佛道皆生于物,菩提本无树,何惧生死?下...
林徽因爱情语录 林徽因爱情语录  短暂的瞬间,漫长的永远,林徽因爱情语录。一代才女林徽因有哪些经典的爱情语录呢?下面...
孩子在家表现家长评语 孩子在家表现家长评语  在日常学习、工作和生活中,大家都写过评语吧,好的评语能给人以心理上的满足感,...
最新版哈利波特经典语录 最新版哈利波特经典语录  “就看你的了,哈利,要使他们看到,作为一名找球手,单靠一个有钱的爸爸是不够...
罪与罚中的经典语录 罪与罚中的经典语录  《罪与罚》俄国作家陀思妥耶夫斯基创作长篇小说的代表作。以下是小编为你整理的罪与...