Связывание свойства 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"
(Также обратите внимание, что разделитель в привязках является ;
- не ,
)