首页 > 解决方案 > 无法解决错误“IMvxViewModel”不包含“PropertyChanged”的定义)

问题描述

我正面临这个错误:

IMvxViewModel不包含 for 的定义, 也找不到接受第一个类型参数的PropertyChanged扩展方法(您是否缺少 using 指令或程序集引用?)PropertyChangedIMvxViewModel

这是我的代码:

[MvxMasterDetailPagePresentation(Position = MasterDetailPosition.Master, WrapInNavigationPage = false, NoHistory = true)]
public partial class MixedNavMasterDetailPage : MvxContentPage
{
    public MixedNavMasterDetailPage()
    {
        InitializeComponent();
    }

    protected override void OnViewModelSet()
    {
        base.OnViewModelSet();

        ViewModel.PropertyChanged += (sender, e) =>
        {
            if (e.PropertyName == nameof(ViewModel.SelectedMenu))
            {
                if (Parent is MasterDetailPage master)
                {

                    master.IsPresented = !master.IsPresented;
                }
            }
        };
    }
}

标签: c#mvvmmvvmcross

解决方案


根据该接口的源代码,该错误是准确的

https://github.com/MvvmCross/MvvmCross/blob/master/MvvmCross/ViewModels/IMvxViewModel.cs

但是,如果您创建了一个自定义视图模型,该模型扩展了框架提供的默认值并派生自INotifyPropertyChanged,那么您需要先检查然后将视图模型转换为所需的类型,然后才能使用所需的成员,

protected override void OnViewModelSet() {
    base.OnViewModelSet();
    var viewModel = ViewModel as INotifyPropertyChanged;
    if(viewModel != null) {
        viewModel.PropertyChanged += (sender, e) => {
            if (e.PropertyName == "SelectedMenu") {
                if (Parent is MasterDetailPage master) {    
                    master.IsPresented = !master.IsPresented;
                }
            }
        };
    }
}

推荐阅读