打破砂锅问~WPF原理
@TOC
前言
做项目的时候,用到了WPF,总结下来,供以后参考,与诸君共勉。
一、理解和编写WPF,离不开理解和编写XAML
1.前端三剑客:HTML、CSS、JAVASCRIPT
- HTML:标签语言嘛
- XAML和html多少还是有点类似的。只不过XAML上添加上了自动binding机制
2.WPF两个核心:也是MVVM等一系列框架的基础,也就是两个重要的接口
- INotifyPropertyChanged
- INotifyPropertyChanged接口实现了数据和UI的联动,数据改变,UI界面随之改变。UI界面,数据改变随之改变
- 这个接口可以理解为监听,生成的Model后,通过ViewModel对Model所有相关者进行监听
- INotifyPropertyChanged接口实现了数据和UI的联动,数据改变,UI界面随之改变。UI界面,数据改变随之改变
- ICommand
3.WPF其中一个比较常用的框架就是MVVM(Model-View-ViewModel)
- 组成部分:
- Model:各个实体类
- View:就是显示的界面,在WPF中一般都是XAML这样的页面
- ViewModel:官方的解释是连接Model和View的桥梁,封装和暴露一些逻辑处理方法。但个人认为,其实所有的控制和方法都在ViewModel中,可以理解为页面所有方法的一个仓库
- MVVM的实现原理
- MVVM实现,简单的来说就是通过ViewModel来连接Model和View实现的。
- ViewModel实现了接口INotifyPropertyChanged,在Model属性改变时可以触发View页面数据改变。
- ViewModel中的command实现ICommand这个接口,使得方法也可以直接绑定在UI控件上,省去页面后台书写控件事件的代码
- 在ViewModel中,定义了一系列的参数和方法,其中UI页面是通过ICommand这个实例来调用绑定的方法的
- MVVM实现,简单的来说就是通过ViewModel来连接Model和View实现的。
4.更具体的敬请收看:官方文档:https://learn.microsoft.com/zh-tw/dotnet/desktop/wpf/advanced/wpf-architecture?view=netframeworkdesktop-4.8
二、既然很niuBi,那咱们不整个例子看看这个WPF,能行?
1.这个项目是一个简单的记事本应用,允许用户输入文本、保存到文件以及从文件中加载文本。这个示例将展示WPF的基本使用方法,包括XAML界面设计和C#后台逻辑的编写。
2.项目结构
- MainWindow.xaml:定义用户界面
- MainWindow.xaml.cs:包含界面的逻辑
3.具体代码:
MainWindow.xaml:这个文件定义了应用的用户界面。它包含一个TextBox用于文本输入,两个Button用于触发保存和加载操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<Window x:Class="SimpleNotePad.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Simple Notepad" Height="350" Width="525">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Open" Click="Open_Click"/>
<MenuItem Header="Save" Click="Save_Click"/>
</MenuItem>
</Menu>
<TextBox x:Name="textBox" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto"/>
</DockPanel>
</Window>MainWindow.xaml.cs:这个文件包含用于处理用户交互(如按钮点击)的逻辑代码。它包括用于保存和加载文本文件的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30using Microsoft.Win32;
using System;
using System.IO;
using System.Windows;
namespace SimpleNotePad
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Save_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
if (saveFileDialog.ShowDialog() == true)
File.WriteAllText(saveFileDialog.FileName, textBox.Text);
}
private void Open_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == true)
textBox.Text = File.ReadAllText(openFileDialog.FileName);
}
}
}
巨人的肩膀
- https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/advanced/?view=netframeworkdesktop-4.8
- https://cloud.tencent.com/developer/article/1342886
- https://learn.microsoft.com/zh-tw/dotnet/desktop/wpf/advanced/wpf-architecture?view=netframeworkdesktop-4.8
- Head First 设计模式
- 设计模式之禅
- 公众号啦、OSCHINA啦、上面的有关设计模式的文章
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


