Android 我的属性在MVVM模型中始终是默认值
我有一个MvvmCross Xamarin Android项目,我想问一下我的按钮的一些奇怪行为 当我用按钮打开我的视图时-按钮出现并且可见。然后,我的属性MyEnumCurrentId会不时更改—始终更改为MyEnum.OK。然而,当我在setter上设置break时,我看到MyEnumCurrentId上的属性不是最后一个(MyEnum.OK),但它总是0 所以我放了一个计数器来检查我的模型是否记得以前设置的属性。我注意到我的计数器总是-1,即使计数器++执行了几次 应用程序中的“我的按钮”有时会消失,这就是问题所在。我想这是因为RaisePropertyChanged(()=>MyEnumCurrentId总是在执行,因为我的属性不知道它们之前设置的值 所以我的问题是为什么会发生这种情况?我应该将这些属性移动到视图模型中,这样可以解决问题,还是 当其他活动更改我正在设置的当前MyEnumCurrentId时 模型Android 我的属性在MVVM模型中始终是默认值,android,mvvm,xamarin,mvvmcross,Android,Mvvm,Xamarin,Mvvmcross,我有一个MvvmCross Xamarin Android项目,我想问一下我的按钮的一些奇怪行为 当我用按钮打开我的视图时-按钮出现并且可见。然后,我的属性MyEnumCurrentId会不时更改—始终更改为MyEnum.OK。然而,当我在setter上设置break时,我看到MyEnumCurrentId上的属性不是最后一个(MyEnum.OK),但它总是0 所以我放了一个计数器来检查我的模型是否记得以前设置的属性。我注意到我的计数器总是-1,即使计数器++执行了几次 应用程序中的“我的按钮”
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属性的结果是true或false(在视图模型中)
鉴于您将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')" />