Связывание свойства Enabled кнопки Android с помощью MvvmCross

У меня проблема, когда я пытаюсь привязать свойство "Enabled" моей кнопки Android к логическому значению моей модели ViewModel с помощью фреймворка MvvmCross, и я действительно не знаю его происхождение.

Итак, у меня есть ViewModel, которая содержит два следующих свойства:

private ProjectDetailDTO _projectDetail;
    public ProjectDetailDTO ProjectDetail
    {
        get { return this._projectDetail; }
        set 
        { 
            _projectDetail = value; 
            RaisePropertyChanged(() => ProjectDetail);
            RaisePropertyChanged(() => HasPicture);
        }
    }

    private bool _hasPicture;
    public bool HasPicture
    {
        get { return ((this.ProjectDetail != null) && !String.IsNullOrEmpty(this.ProjectDetail.Pictures)); }
        set { _hasPicture = value;
            RaisePropertyChanged(() => HasPicture); 
        }
    }

Как вы понимаете, моя кнопка привязана к свойству HasPicture. Итак, у меня есть следующий код для моей кнопки в моем файле.axml:

<Button
    local:MvxLang="Text LblSeePicturesValue"
    local:MvxBind="Enabled HasPicture,Click ShowProjectPicturesCommand"
    android:id="@+id/buttonPictures"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" />

Я не думаю, что это проблема ViewModel, потому что мое приложение WP хорошо работает с этим кодом. Фактически, мой ProjectDetailDTO заполняется вызовом веб-службы, то есть асинхронным методом. Я думаю, именно поэтому, когда привязка реализована, свойство HasPicture имеет ложное значение. Но с моим кодом ViewModel свойство HasPicture должно быть обновлено после заполнения ProjectDetailDTO. Что-то я не так сделал в моем Android View?

Спасибо за любую помощь!

1 ответ

Решение

Я думаю, что вы видите здесь некоторое взаимодействие между ICommand.CanExecute и Enabled имущество. Об этом есть обсуждение на https://github.com/MvvmCross/MvvmCross/issues/729

Чтобы обойти это, попробуйте переключить привязку на:

local:MvxBind="Click ShowProjectPicturesCommand;Enabled HasPicture"

(Также обратите внимание, что разделитель в привязках является ; - не ,)

Другие вопросы по тегам