ここ数週間、MVVMCross フレームワークを使用してクロス プラットフォーム アプリ (IOS/Android/WP7) の開発に取り組んできました。今日、解決方法がよくわからない問題に遭遇したので、うまくいけば、正しい方向に私を押し進めることができます.
IOS では、別のページに移動するための次の構造があります (以下のコードは ViewModel にあります)。
KeyValuePair<string,string> kvpAct1 = new KeyValuePair<string, string>("short", ".countertest5");
public IMvxCommand BeckhoffActuator1
{
get
{
return new MvxRelayCommand<Type>((type) => this.RequestNavigate<Beckhoff.BeckhoffActuatorViewModel>(kvpAct1));
}
}
この IMvxCommand が起動される (ボタンが押される) と、次のビュー (この場合は BeckhoffActuatorViewModel) が読み込まれます。BeckhoffActuatorView のコードでは、上記のキーと値のペアを使用します。
public class BeckhoffActuatorView : MvxTouchDialogViewController<BeckhoffActuatorViewModel>
{
ICollection<string> icol;
public BeckhoffActuatorView(MvxShowViewModelRequest request) : base(request, UITableViewStyle.Grouped, null, true)
{
icol = request.ParameterValues.Values;
}
public override void ViewDidLoad()
{
//Code
}
}
この構造は IOS では正常に機能していますが、Android アプリでも同じ構造を使用したいと考えています。
ViewModel のコードは変更されていません。それが MVVM の全体的な考え方だからです。ただし、BackhoffActuatorView のコードは Android では異なります。
public class BeckhoffActuatorView : MvxBindingActivityView<BeckhoffSensorViewModel>
{
public ICollection<string> icol;
public BeckhoffActuatorView()
{
Debug.WriteLine("Standard");
}
public BeckhoffActuatorView(MvxShowViewModelRequest request)
{
Debug.WriteLine("Custom");
icol = request.ParameterValues.Values;
}
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.BeckhoffActuatorView);
}
}
上記のコードは機能しません。MvxBindingActivityView は、私が IOS で使用している ViewController に似たものを実装していないようです。コードは標準コンストラクターにのみ含まれており、それを完全に除外すると、コンパイル/実行されません。
RequestNavigate で送信した keyvaluepair にアクセスできることを知っている人はいますか? ありがとうございました!