MAUI 使用INotifyPropertyChanged接口实现不同ViewModel之间传值
时间: 2024-11-12 17:39:38 浏览: 6
在MAUI(Xamarin.Forms + .NET MAUI)中,INotifyPropertyChanged是一个接口,它被用来通知视图(View)对象数据模型(ViewModel)的数据属性有变化。当你在ViewModel中修改了属性,只要实现了INotifyPropertyChanged,视图就可以自动更新,而无需手动调用Update或Refresh方法。
要使用这个接口,首先在ViewModel类中声明并实现INotifyPropertyChanged,例如:
```csharp
public class MyViewModel : INotifyPropertyChanged
{
private string _myProperty;
public string MyProperty
{
get => _myProperty;
set
{
_myProperty = value;
OnPropertyChanged("MyProperty");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
当`MyProperty`的值改变时,会触发`OnPropertyChanged`事件,通知所有订阅该事件的对象(如视图)进行更新。
为了在不同的ViewModel之间传递数据,一种常见的做法是在共享服务(比如DependencyService、MessagingCenter或者通过MVVM库提供的通讯机制)中创建一个共享的数据源,各ViewModel订阅或发布消息来获取或变更数据。
举个简单的例子,假设你有一个BaseViewModel,包含一个通用的数据字段,其他ViewModel可以继承或直接使用这个BaseViewModel:
```csharp
public abstract class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public string SharedData { get; set; } // 共享数据
}
// 子类ViewModel继承BaseViewModel并使用SharedData
public class ChildViewModel : BaseViewModel
{
// 在ChildViewModel中修改SharedData会影响所有订阅它的ViewModel
public override void SomeAction()
{
SharedData = "New Value";
OnPropertyChanged(nameof(SharedData));
}
}
```
阅读全文