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

时间:2015-08-07 13:26:44

标签: android mvvm xamarin mvvmcross

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

当我打开我的视图时,按钮 - 按钮出现并且可见。然后不时我的属性MyEnumCurrentId正在改变 - 总是改为MyEnum.OK。然而,当我在setter上放置break时,我在MyEnumCurrentId之前看到的那个属性不是最后一个(MyEnum.OK),但它总是为0.

所以我把计数器检查我的模型是否记得以前设置的属性。我注意到我的计数器始终为-1,即使计数器++执行几次也是如此。

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

所以我的问题是为什么会发生这种情况?我应该将这些属性移动到查看模型并且应该解决问题,还是?

当其他活动改变当前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);
        }
    }     

XML

<Button
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_alignParentRight="true"
                local:MvxBind="Text MyText; Visible IsMyTextVisible; Typeface StringToFont('MyFont')" />

1 个答案:

答案 0 :(得分:0)

我不确定它在Xamarin Android中是如何工作的,但我认为问题是你指定 bool 属性,其结果为 true false (在视图模型中) 并且在视图中您将bool值分配给可见性属性,但是可见性值可以设置为仅Invisible或Visible不为true或false我希望您得到它