You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF MVVM Community Toolkit:如何简化ViewModel关联Model的属性写法

使用MVVM Community Toolkit简化ViewModel代理属性的写法

当然有更简洁的方式,MVVM Community Toolkit提供的SetProperty方法可以帮你大幅简化重复代码,同时保留原有逻辑:

简化后的ViewModel示例

public class TheViewModel : ObservableObject
{
    private readonly TheModel _theModel;

    public bool FirstProp
    {
        get => _theModel.FirstProp;
        set => SetProperty(ref _theModel.FirstProp, value);
    }

    public int SecondProp
    {
        get => _theModel.SecondProp;
        set => SetProperty(ref _theModel.SecondProp, value);
    }

    public TheViewModel(TheModel theModel)
    {
        _theModel = theModel;
    }
}

关键说明

  • SetProperty是ObservableObject基类提供的方法,它会自动完成值比较、赋值和触发PropertyChanged事件这三个步骤,完全替代你原来手动编写的if判断和OnPropertyChanged()调用。
  • 这种写法和你原来的逻辑完全一致,但代码量减少了一半以上,属性越多,简化效果越明显。

进阶优化(若允许修改Model)

如果可以修改你的TheModel类,让它继承ObservableObject并实现属性通知:

public class TheModel : ObservableObject
{
    private bool _firstProp;
    public bool FirstProp
    {
        get => _firstProp;
        set => SetProperty(ref _firstProp, value);
    }

    private int _secondProp;
    public int SecondProp
    {
        get => _secondProp;
        set => SetProperty(ref _secondProp, value);
    }
}

此时ViewModel可以监听Model的属性变更事件,自动转发通知,进一步简化:

public class TheViewModel : ObservableObject
{
    public TheModel TheModel { get; }

    public bool FirstProp => TheModel.FirstProp;
    public int SecondProp => TheModel.SecondProp;

    public TheViewModel(TheModel theModel)
    {
        TheModel = theModel;
        TheModel.PropertyChanged += OnModelPropertyChanged;
    }

    private void OnModelPropertyChanged(object? sender, PropertyChangedEventArgs e)
    {
        // 当Model的属性变化时,触发ViewModel对应属性的通知
        OnPropertyChanged(e.PropertyName);
    }

    // 记得在ViewModel销毁时解绑事件,避免内存泄漏
    ~TheViewModel()
    {
        TheModel.PropertyChanged -= OnModelPropertyChanged;
    }
}

这种方式下,ViewModel的属性只需要写getter,所有变更通知都通过事件转发完成,代码更加简洁。

内容的提问来源于stack exchange,提问作者bighunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:23:13