【问题标题】:Unable to solve error 'IMvxViewModel' does not contain a definition for 'PropertyChanged' )无法解决错误“IMvxViewModel”不包含“PropertyChanged”的定义)
【发布时间】:2018-10-08 14:42:33
【问题描述】:

我正面临这个错误:

IMvxViewModel 不包含 PropertyChanged 并且没有扩展方法 PropertyChanged 接受一个 可以找到IMvxViewModel 类型的第一个参数(您是否缺少 使用指令还是程序集引用?)

这是我的代码:

[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;
                }
            }
        };
    }
}

【问题讨论】:

  • 那个错误根据那个接口的源代码github.com/MvvmCross/MvvmCross/blob/master/MvvmCross/ViewModels/…是准确的
  • 解释你想要达到的目标。
  • 我想在 MasterPage 中创建具有多个菜单的 MasterDetailPage,当我单击该菜单时它应该打开特定的 DetailPage。我无法做到这一点。请帮我解决这个问题。提前致谢。

标签: c# mvvm mvvmcross


【解决方案1】:

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

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;
                }
            }
        };
    }
}

【讨论】:

  • 我已经实现了上面的代码,但现在它在 SelectedMenu 上显示错误
  • @Diksha 同样的问题。视图模型的类型是什么?您需要将其转换为所需的类型才能访问它的成员。否则你将不得不使用原始字符串。
  • ViewModel的类型是IMvxViewModel。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2021-12-16
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多