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

.NET MAUI中如何使用[DependsOn]属性?.NET 6环境实现方案咨询

在.NET 6 MAUI中实现属性依赖的两种方案

方案一:使用.NET MAUI Community Toolkit的[DependsOn]

原Xamarin Community Toolkit的MVVM组件已迁移至**.NET MAUI Community Toolkit**,首先需要安装对应的NuGet包:

Install-Package Microsoft.Maui.Controls.CommunityToolkit

你可以直接使用[DependsOn]属性,也可以配合MAUI推荐的[ObservableProperty]特性简化代码:

写法1:使用[NotifyPropertyChangedFor](反向声明依赖)

这种写法是在源属性上声明“修改我时要通知目标属性更新”,等价于原[DependsOn]的功能:

using CommunityToolkit.Mvvm.ComponentModel;

public partial class MyViewModel : ObservableObject
{
    [ObservableProperty]
    [NotifyPropertyChangedFor(nameof(FullName))]
    private string firstName;

    [ObservableProperty]
    [NotifyPropertyChangedFor(nameof(FullName))]
    private string lastName;

    public string FullName => $"{FirstName} {LastName}";
}

写法2:直接使用[DependsOn]

和原Xamarin版本的用法完全一致,在目标属性上声明依赖的源属性:

using CommunityToolkit.Mvvm.ComponentModel;

public partial class MyViewModel : ObservableObject
{
    [ObservableProperty]
    private string firstName;

    [ObservableProperty]
    private string lastName;

    [DependsOn(nameof(FirstName), nameof(LastName))]
    public string FullName => $"{FirstName} {LastName}";
}

方案二:手动实现(无需第三方依赖)

如果不想引入额外包,直接在源属性的setter中触发目标属性的变更通知即可:

using Microsoft.Maui.Controls;

public class MyViewModel : BindableObject
{
    private string firstName;
    private string lastName;

    public string FirstName
    {
        get => firstName;
        set
        {
            if (SetProperty(ref firstName, value))
            {
                OnPropertyChanged(nameof(FullName));
            }
        }
    }

    public string LastName
    {
        get => lastName;
        set
        {
            if (SetProperty(ref lastName, value))
            {
                OnPropertyChanged(nameof(FullName));
            }
        }
    }

    public string FullName => $"{FirstName} {LastName}";
}

如果你的ViewModel继承自自定义的BaseViewModel,只要BaseViewModel实现了INotifyPropertyChanged接口并提供SetProperty这类属性更新方法,逻辑完全一致——在源属性更新后,手动调用OnPropertyChanged通知FullName的变更。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:26