C#MAUI 类之间相互传值
时间: 2024-10-31 11:06:30 浏览: 26
在C# MAUI (Microsoft Xamarin.Forms) 中,类之间的数据传递可以通过多种方式实现,特别是当你需要在不同视图模型(View Models)、页面(Page)或者服务(Service)之间共享信息时。以下是几种常见的方法:
1. **属性传值**(Property Injection):通过在基类或服务中公开读写属性,并在派生类中设置这些属性,可以实现在类间的简单数据交换。
```csharp
public abstract class BaseViewModel
{
public string SharedData { get; set; }
}
public class ChildViewModel : BaseViewModel
{
// 在构造函数或某个初始化方法中设置SharedData
public ChildViewModel()
{
SharedData = "Some value";
}
}
```
2. **依赖注入(DI)**:Xamarin.Forms 提供了诸如 Prism、MvvmCross 或 Microsoft's CommunityToolkit.Mvvm 这样的框架,它们支持DI来管理视图模型之间的通信。你可以将数据作为依赖项注册,然后在需要的地方注入。
```csharp
services.AddSingleton<ISharedService>(new SharedService("Some data"));
```
然后在需要的地方注入 `ISharedService` 并访问数据。
3. **事件通知(Event Aggregation)**:通过发布订阅模式,一个类改变状态时,它会发出一个事件,其他依赖该事件的类可以监听并处理。
```csharp
public class DataSource
{
public event PropertyChangedEventHandler PropertyChanged;
public void UpdateData(string newData)
{
// 更新数据...
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Data)));
}
public string Data { get; set; }
}
// 视图模型订阅更新事件
public class ViewModel : INotifyPropertyChanged
{
private readonly DataSource _dataSource;
public ViewModel(DataSource dataSource)
{
_dataSource = dataSource;
_dataSource.PropertyChanged += OnDataSourcePropertyChanged;
}
private void OnDataSourcePropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(DataSource.Data))
MyProperty = _dataSource.Data;
}
// ... 其他代码
}
```
阅读全文