.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
相关产品推荐
相关产品推荐

