不同viewmodel之间如何进行数据传递

新手求助:如何在WPF中,从A页面点击按钮触发B页面(包含进度条)时,将数据从A的ViewModel传至B的ViewModel?求解Viewmodel之间的数据共享策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各位大神,小女子刚学WPF,有个问题请教一下,有个A主页点击其按钮会弹出一个B view页面(只有进度条属性),A页面viewmodel函数中读取信息怎么传递到B的viewmodel中呢?

在MAUI(Xamarin.Forms + .NET MAUI)中,INotifyPropertyChanged是一个接口,它被用来通知视图(View对象数据模型(ViewModel)的数据属性有变化。当你在ViewModel中修改了属性,只要实现了INotifyPropertyChanged,视图就可以自动更新,而无需手动调用UpdateRefresh方法。 要使用这个接口,首先在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)); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值