Android 我的属性在MVVM模型中始终是默认值

Android 我的属性在MVVM模型中始终是默认值,android,mvvm,xamarin,mvvmcross,Android,Mvvm,Xamarin,Mvvmcross,我有一个MvvmCross Xamarin Android项目,我想问一下我的按钮的一些奇怪行为 当我用按钮打开我的视图时-按钮出现并且可见。然后,我的属性MyEnumCurrentId会不时更改—始终更改为MyEnum.OK。然而,当我在setter上设置break时,我看到MyEnumCurrentId上的属性不是最后一个(MyEnum.OK),但它总是0 所以我放了一个计数器来检查我的模型是否记得以前设置的属性。我注意到我的计数器总是-1,即使计数器++执行了几次 应用程序中的“我的按钮”

我有一个MvvmCross Xamarin Android项目,我想问一下我的按钮的一些奇怪行为

当我用按钮打开我的视图时-按钮出现并且可见。然后,我的属性MyEnumCurrentId会不时更改—始终更改为MyEnum.OK。然而,当我在setter上设置break时,我看到MyEnumCurrentId上的属性不是最后一个(MyEnum.OK),但它总是0

所以我放了一个计数器来检查我的模型是否记得以前设置的属性。我注意到我的计数器总是-1,即使计数器++执行了几次

应用程序中的“我的按钮”有时会消失,这就是问题所在。我想这是因为RaisePropertyChanged(()=>MyEnumCurrentId总是在执行,因为我的属性不知道它们之前设置的值

所以我的问题是为什么会发生这种情况?我应该将这些属性移动到视图模型中,这样可以解决问题,还是

当其他活动更改我正在设置的当前MyEnumCurrentId时

模型
private int counter=-1;
公共髓鞘
{
获取{return\u MyEnumCurrentId;}
设置
{
如果(计数器IsMyTextVisible);
}
_MyEnumCurrentId=值;
RaisePropertyChanged(()=>MyEnumCurrentId);
}
}
私有bool_ismytexvisible;
公共图书馆是可见的
{
获取{return\u ismytexvisible;}
设置
{
_Info(“正在更改IsMyTextVisible上的属性:“+值”);
_IsMyTextVisible=值;
RaisePropertyChanged(()=>IsMyTextVisible);
}
}     
XML
我不确定它在Xamarin Android中是如何工作的,但我认为问题在于您分配的bool属性的结果是truefalse(在视图模型中)
鉴于您将bool值指定给可见性属性,但可见性值只能设置为不可见或可见,而不是真或假,我希望您能得到它

我不确定它在Xamarin Android中是如何工作的,但我认为问题在于您将bool属性指定为结果false(视图模型中)
鉴于您将bool值指定给visibility属性,但是visibility值可以设置为仅不可见或可见,而不是true或false,我希望您能理解它

我并不真正了解计数器的用途。首先,当您有数据绑定属性时,您应该使用属性getter/setter而不是backing变量。换句话说,您应该使用
IsMyTextVisible=true;
。其次,设置MyEnumCurrentId的初始值的责任是什么?此外,这个值是否需要在整个激活过程中保持?我不太明白计数器的用途。首先,当您有数据绑定属性时,您应该使用pr属性获取程序/设置程序,而不是支持变量。换句话说,您应该使用
IsMyTextVisible=true;
。其次,是什么负责设置MyEnumCurrentId的初始值?此外,此值是否需要在整个激活过程中保持?
     private int counter = -1;

     public MyEnum MyEnumCurrentId
        {
            get { return _MyEnumCurrentId; }
            set
            {
                if (counter <2)
                {
                    counter++;
                    if(value == MyEnum.OK)
                        _IsMyTextVisible = true;
                    else
                        _IsMyTextVisible = false;
                    RaisePropertyChanged(() => IsMyTextVisible);
                }
                _MyEnumCurrentId = value;      

                RaisePropertyChanged(() => MyEnumCurrentId);            
            }
        }


    private bool _IsMyTextVisible;

    public bool IsMyTextVisible
    {
        get{ return _IsMyTextVisible; }
        set
        {
            _logger.Info("changing property on IsMyTextVisible: "+value);
            _IsMyTextVisible = value;
            RaisePropertyChanged(() => IsMyTextVisible);
        }
    }     
<Button
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_alignParentRight="true"
                local:MvxBind="Text MyText; Visible IsMyTextVisible; Typeface StringToFont('MyFont')" />