WPF中MVVM手动实现PropertyChanged和RelayCommand

背景:PropertyChanged和Command总是没有记住怎么写

PropertyChanged:

cs 复制代码
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

-- 使用上特性[CallerMemberName]的作用就是由原本调用这个方法的使用要传入属性的名称作为这个方法的参数,但是现在就不用了,直接调用方法,会自动将参数(这里是属性的名称)传过去。所以调用就直接OnPropertyChanged()就行了,不需要原理的nameof(属性名)

RelayCommand:

cs 复制代码
public class RelayCommand : ICommand
{
    private readonly Action<object> _execute;
    private readonly Predicate<object> _canExecute;

    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
    {
        _execute = execute ?? throw new ArgumentNullException(nameof(execute));
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute == null || _canExecute(parameter);
    }

    public void Execute(object parameter)
    {
        _execute(parameter);
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}
相关推荐
_洋4 分钟前
Three.js加载 .obj文件 和 .gltf文件
开发语言·javascript·ecmascript
wjs20248 分钟前
Font Awesome 性别图标
开发语言
SmartBrain9 分钟前
AI全栈开发(SDD):慢病管理系统工程级设计
java·大数据·开发语言·人工智能·架构·aigc
lsx20240610 分钟前
选择(Selectable)
开发语言
漠效11 分钟前
随机代理‌IP访问脚本
开发语言·python
SilentSamsara16 分钟前
元类与 __init_subclass__:类是如何被“创建“出来的
开发语言·python·青少年编程
小a杰.36 分钟前
Ascend C算子开发实战 - 从零开始写算子
c语言·开发语言
雪度娃娃38 分钟前
Asio异步读写——连接的安全回收问题
开发语言·c++·安全·php
baivfhpwxf202343 分钟前
c# 中对像之间频繁的转换会慢吗?
开发语言·c#
SilentSamsara44 分钟前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程