我已经使用MVVMCross几个月了,到目前为止给我留下了非常深刻的印象。但是,我遇到了一个我无法解决的问题。
我已经将其分解为最简单的解决方案,以便可以重现问题。问题的中心是在“对话框”主题中设置活动按钮。旋转设备时,按钮命令绑定将丢失,按钮不再触发视图模型中的命令。奇怪的是,所有其他绑定仍然有效。
为了模拟这个,我创建了一个
的解决方案1)一个简单的MvxActivity,只有一个按钮。此按钮打开第二个活动,该活动被设置为对话框。
2)在第二个MvxActivity上,我有几个按钮和一个EditText和TextView控件。这些按钮绑定到视图模型上的命令,EditText和TextView也绑定到属性。
我尝试将以下属性添加到第二个活动(如其他地方所建议的那样),但它不起作用。
ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
以下是导致此问题的第二个视图。删除主题属性将使其工作 - 但我想要一个对话框主题!:
using Android.App;
using Android.OS;
using Cirrious.MvvmCross.Droid.Views;
namespace RotateIssue.Views
{
[Activity(Label = "MyActivity", Theme = "@android:style/Theme.Holo.Dialog")]
public class SecondView : MvxActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.SecondView);
}
}
}
以下是该视图的视图模型:
using Cirrious.MvvmCross.ViewModels;
using System.Windows.Input;
namespace RotateIssue.Core.ViewModels
{
public class SecondViewModel : MvxViewModel
{
private string _hello = "";
public string Hello
{
get { return _hello; }
set { _hello = value; RaisePropertyChanged(() => Hello); }
}
public bool DataValid
{
get
{
return (_hello.Length > 0);
}
}
private MvxCommand _saveCommand;
public ICommand SaveCommand
{
get
{
_saveCommand = _saveCommand ?? new MvxCommand(SaveAsset);
return _saveCommand;
}
}
private MvxCommand _cancelCommand;
public ICommand CancelCommand
{
get
{
_cancelCommand = _cancelCommand ?? new MvxCommand(Cancel);
return _cancelCommand;
}
}
public void Cancel()
{
Close(this);
}
public void SaveAsset()
{
if (DataValid)
{
//TODO: Do something useful
Close(this);
}
}
}
}
如果需要,我可以提供AXML。该应用程序的目标是API级别16。