VM访问View(Interaction)

引言

ViewModel访问View的场景非常常见,比如打开关闭窗口,访问剪切板等等,想操作前端View的一些功能和属性必须要View的引用。这里介绍一种非常高效的方式与View进行交互。当然有很多方式,比如回调函数、CommunityToolkit.MVVM的Messenger等

1、Interaction

相当于统一格式了,支持任意消息类型订阅处理。包含入参和返回值

cs 复制代码
public class Interaction<TIn, TOut>
{
    private Func<TIn, Task<Tout>>? _handler;

    public void RegisterHandler(Func<TIn, Task<TOut>> handler)
    {
        ArgumentNullException.ThrowIfNulL(handler);
        handler = handler;
    }

    public async Task<Tout> Handle(TIn input)
    {
        if(handler =null)
            throw new InvalidoperationException("No handler registered.");
        return await _handler(input);
    }
}

public readonly struct Unit
{
    public static readonly Unit Default = default;
    public override int GetHashCode() => 0;
    public override bool Equals(object? obj) => obj is Unit;
}

1.1、VM中使用

这样再在ViewModel中声明一个实例使用:

cs 复制代码
public Interaction<Unit,string> RequestMessageInteraction{get;} = new();
[RelayCommand]
private async Task UseInteraction()
{
    IsBusy = true;
    Message = await RequestMessageInteraction.Handle(Unit.Default);
    IsBusy = false;
}

1.2、View中订阅

cs 复制代码
public MainWindow()
{
    InitializeComponent();
    var viewModel = new MainViewModel();
    this.DataContext = viewModel;
    
    viewModel.RequestMessageInteraction.RegisterHandler(async _ =>
    {
        await Task.Delay(2000);
        return "Hello from MainWindow with Interaction!";
    });
}

一般通过依赖注入进行VM的实例设置,这里简单实例化了一个MainViewModel。

相关推荐
FuckPatience17 小时前
WPF DataGrid 行根据某个属性循环变色动画
wpf
一条闲鱼_mytube3 天前
高并发短链接系统设计
wpf
一个天蝎座 白勺 程序猿4 天前
IoTDB集群扩容:从慌乱到从容的经验分享
数据库·wpf·时序数据库·iotdb
samble5 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
samble5 天前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
蜗牛互联网8 天前
OLMo-core 3的token gerrymandering提醒:MoE路由要按时间窗验收
java·人工智能·wpf
LateFrames8 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
samble8 天前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
SamChan9010 天前
PDF页面旋转与CropBox陷阱:译文回填位置总是错位的根因实测
python·ai·pdf·wpf
SamChan9012 天前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf