Невозможно устранить ошибку «IMvxViewModel» не содержит определения «PropertyChanged») - PullRequest
0 голосов
/ 08 октября 2018

Я сталкиваюсь с этой ошибкой:

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

1 Ответ

0 голосов
/ 08 октября 2018

Эта ошибка является точной в соответствии с исходным кодом для этого интерфейса.

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