课程链接:全新C#/WPF入门到多项目实战开发教程 | 适合新手 200P持续更新 2021最新录制上位机合集(MVVM/控件/winform/通信/绑定工控)B0469_哔哩哔哩_bilibili
2022全新录制 WPF数据绑定详细教程 零基础学习入门到精通一步到位 (C#/零基础/WPF/数据绑定)B0976_哔哩哔哩_bilibili
10月最新【WPF入门到实战】100P 已完结 最全WPF合集教程 快速上手(WPF上位机/零基础/项目实战/C#/.NET/工控/PLC)B1246_哔哩哔哩_bilibili
重庆教主:up主
WPF&MVVM项目实战教学之《数据管理系统》QQ群864486030_哔哩哔哩_bilibili
WPF实战《c#进销存管理系统》手把手教您开发桌面应用程序_哔哩哔哩_bilibili
C#&WPF实战之《仓库管理系统》QQ群864486030_哔哩哔哩_bilibili
数据访问层、、业务逻辑层、UI层、其他类
业务逻辑层调用数据访问层
,界面UI层调用业务逻辑层
1、基础控件
1.1、MVVM
1.1.1、数据绑定与行为绑定
1、ICommand
与行为绑定
2、INotifyPropertyChanged
两个对象
数据绑定值改变,属性改变。
C# 计算器应用程序
ICommand.cs
internal class CommandBase:ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
// 绑定了这个命令的按钮是否可用
return DoCanExecute?.Invoke(parameter)==true;
}
public void Execute(object parameter) // 与CanExecute为ICommand的方法
{
// 逻辑控制
DoAction?.Invoke(parameter);
}
public Action<object> DoAction { get; set; }
public Func<object, bool> DoCanExecute{ get; set; }
public void RaiseCanChanged()
{
CanExecuteChanged?.Invoke(this, new EventArgs()); // CanExecuteChanged 当出现时为ICommand的事件 当发生时候会执行CanExecute方法
}
}
MainViewModel.cs
public class MainViewModel:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _value;
MainWindow _mainWindow=null;
//public MainViewModel( MainWindow mainWindow)
//{
// _mainWindow=mainWindow;
//}
public string Value
{
get { return _value; }
set
{
_value = value;
//_mainWindow.tbName.Text = value;
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("Value"));
if (value == "100")
{
ValueColor = Brushes.Red;
}
(this.ValueCommand as CommandBase).RaiseCanChanged();
}
}
private Brush _valueColor = Brushes.Orange;
public Brush ValueColor
{
get{ return _valueColor; }
set{ _valueColor = value;
// 更改 PropertyChanged 组件上的属性时,将引发事件。 对象 PropertyChangedEventArgs 指定更改的属性的名称。
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ValueColor")); // 向客户端发出某一属性值已更改的通知
}
}
private ICommand _valueCommand; // = new CommandBase() { DoAction = new Action<object>() }; // 对属性赋值
public ICommand ValueCommand
{
get {
if(_valueCommand==null)
{
_valueCommand = new CommandBase()
{
DoAction = new Action<object>(ValueCommandAction) ,
DoCanExecute = new Func<object,bool>(CanEcecute)
};
}
return _valueCommand; }
set { _valueCommand = value; }
}
private void ValueCommandAction(object obj)
{
Value = "100";
}
private bool CanEcecute(object obj)
{
return !string.IsNullOrEmpty(Value);
}
}
MainWindow.cs
MainViewModel mainviewmodel = null;
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
1.1.2、简介
1、WPF
可以做动画,前后端分离,
.net UI框架,集成了矢量图形,流动字体支持,3d视觉效果和控件模型框架,UI与业务逻辑分离,UI-XAML描述, WPF引擎解释为.NET对象
布局控件: panel
内容控件:ContetControl
带标题内容控件,内容控件可以设置标题:Header 父类:HeaderedContentControl
条目空间 可以显示一列数据,数据类型一般相同ItemControl
代表提的条目空间
2、XAML
:为构建应用程序用户界面而创建的一种新的“可扩展应用程序标记语言” ,提供一种便于拓展和定位的语法来定义和程序业务逻辑分离的用户界面
定义应用程序的界面元素
显示声明WPF资源(样式,模板,动画等)
可扩展性(UI控件)
集中关注界面设计
命名空间: xaml与.net程序语言一样,也是通过命名空间有效组织xaml内部的相关元素,不一样,xaml解析器标准
自定义类或程序集映射语法
xmlns:[必选前缀] = "clr-namespace:[命名空间];assembly=[程序集名称]"
1.1.3、WPF基础
app.config 配置文件 连接字符串, 配置信息
App.xaml 设置应用程序起始文件,系统资源级
App.xaml.cs app.xaml文件的后台类文件
MainWindow.xaml Window ----WPF应用程序界面与Xaml设计文件
MainWindow.xaml.cs--------xaml窗口文件的后台代码文件
StartupUri = "MainWindow.xaml" 指定起始文件
<Application.Resource> 定义整个WPF应用程序的资源
<Grid> 布局控件 网格型
事件注册:05 标签文本框密码框按钮介绍_哔哩哔哩_bilibili
1.2、WPF控件
1、Button
2、RadioButton
3、CheckBox
父类:ToggleButtton
复选框:允许可以选择多个