我想对我的ViewModel中设置的属性(在我的Xamarin Forms ContentPage代码中使用INotifyPropertyChanged)做出反应。
假设我可以访问我的ViewModel,我“可以”这样做 -
protected override void OnAppearing()
{
base.OnAppearing();
// My base class enabled ViewModel access
ViewModel.PropertyChanged += (sender, e) =>
{
Debug.WriteLine(e.PropertyName + " Changed on ViewModel");
if (e.PropertyName == "Bob")
{
DoSomething();
}
};
我是否必须考虑从ViewModel上的PropertyChanged事件取消注册?
还有其他更优雅的方法吗?
例如,我已经看到了使用Rx Extensions实现它的方法,我使用了MvxPropertyChangedListener和Mvvmcross来帮助解决这类问题。
为了回应@Jesus Angulo,我现在这样做的原因是当我的项目列表发生变化时,以编程方式在滚动视图中填充StackLayout,这样我就不必设置任何自定义绑定代码。
感谢您的帮助。
答案 0 :(得分:1)
如果确实必须这样做,我建议使用消息中心在您在后面的页面中订阅的视图模型中发布消息。
Here is a how to on Messaging Center
但是必须有一种方法可以在视图模型中完成所有这些。
无法将StackLayout更改为ListView并在属性更改时填充事物列表?