【问题标题】:Binding the Enabled property of a Android button with the MvvmCross将 Android 按钮的 Enabled 属性与 MvvmCross 绑定
【发布时间】:2014-08-25 12:23:03
【问题描述】:

当我尝试使用 MvvmCross 框架将我的 Android Button 的“启用”属性绑定到我的 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 视图中做错了什么吗?

感谢您的帮助!

【问题讨论】:

    标签: button binding xamarin.android mvvmcross


    【解决方案1】:

    我认为您在这里看到的是ICommand.CanExecuteEnabled 属性之间的一些交互。 https://github.com/MvvmCross/MvvmCross/issues/729有一个关于这个的讨论

    要解决此问题,请尝试将绑定切换为:

    local:MvxBind="Click ShowProjectPicturesCommand;Enabled HasPicture"
    

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

    【讨论】:

    • 再次感谢您的帮助 Stuart,将我的行替换为您的解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多