将Android按钮的Enabled属性与MvvmCross绑定

7
当我尝试使用MvvmCross框架将Android按钮的“Enabled”属性绑定到我的ViewModel中的布尔值时,出现了问题,我真的不知道它的起源。
因此,我有一个包含以下两个属性的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是通过调用Web服务来填充的,因此是通过异步方法来实现的。我认为这就是为什么当绑定实现时,HasPicture属性具有false值的原因。但是,使用我的ViewModel代码时,当填充ProjectDetailDTO时,HasPicture属性应该被更新。在我的Android视图中是否有任何错误?谢谢任何帮助!
1个回答

11

我认为你在这里看到的是 ICommand.CanExecuteEnabled 属性之间的一些交互作用。这个问题在 https://github.com/MvvmCross/MvvmCross/issues/729 上有讨论。

为了解决这个问题,请尝试将绑定切换为:

local:MvxBind="Click ShowProjectPicturesCommand;Enabled HasPicture"

(还要注意绑定中的分隔符是 ; 而不是 ,


再次感谢您的帮助,Stuart。用您的代码替换我的代码解决了我的问题。 - Alexandre D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接