저는 MVVMCross를 Xamarin과 함께 사용하여 Android 앱을 개발 중입니다. 나는 개인 변수 _currentCommand를 가지고 있는데, 이는 예상했던대로 속성 내에서 수정되지 않는다. 는 I이 뷰 모델이 이러한 탐색에 매여MvvmCross 개인 변수가 값을 변경하지 않습니다.
public class FooNavigationViewModel : MvxViewModel {
public FooNavigationViewModel() {
_viewModels.Add (new MvxCommand (() => ShowViewModel<DatePickerViewModel>()));
_viewModels.Add (new MvxCommand (() => ShowViewModel<FooReasonViewModel>()));
_viewModels.Add (new MvxCommand (() => ShowViewModel<FooBleedListViewModel>()));
}
private List<MvxCommand> _viewModels = new List<MvxCommand>();
private MvxCommand _currentCommand;
public MvxCommand NextCommand {
get {
int nextViewId = _currentCommand == null ? 1 : _viewModels.IndexOf (_currentCommand) + 1;
if (nextViewId >= _viewModels.Count) {
return new MvxCommand (() => ShowViewModel<FooSummaryViewModel>());
} else {
_currentCommand = _viewModels [nextViewId];
return _currentCommand;
}
}
}
public MvxCommand CancelCommand {
get {
return _currentCommand;
//new MvxCommand (() => ShowViewModel<MainMenuViewModel>());
}
}
public MvxCommand PreviousCommand {
get {
int nextViewId = _currentCommand == null ? 0 : _viewModels.IndexOf (_currentCommand) - 1;
if (nextViewId < 0) {
return new MvxCommand (() => ShowViewModel<MainMenuViewModel>());
} else {
_currentCommand = _viewModels [nextViewId];
return _currentCommand;
}
}
}
}
탐색이 단편에
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/foo"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Previous"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/btn_previous"
local:MvxBind="Click PreviousCommand" />
<Button
android:text="Cancel"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/btn_cancel"
local:MvxBind="Click CancelCommand" />
<Button
android:text="Next"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/btn_next"
local:MvxBind="Click NextCommand" />
</LinearLayout>
제어를하고는 FrameLayout이 중 다른 단편을 전환하는데 사용된다. 전환 조각은 정상적으로 작동하지만 버튼을 몇 번 클릭했는지 상관없이 단일 조각 만 진행합니다.
내 생각 엔보기를로드하고 취소 버튼을 클릭하면 null이 반환됩니다. 그러나 DatePickerViewModel이 반환됩니다. 사실, 내가 클릭 한 것과 상관없이 DatePickerViewModel은 항상 CancelCommand에서 반환됩니다. 그러나 NextCommand를 클릭하면 FooReasonViewModel이 예상대로 반환됩니다. 나는 _currentCommand가 setter를 가질 수없고 프라이빗 (그래서 내 FooNavigationViewModel 내에서만 수정 될 수 있어야 함)하는 방법에 대해 혼란스러워하고, 하나의 값으로 리턴 된 다음 즉시 다른 값을 갖는다. 리플렉션과 MVVMCross로 이상한 일이 일어나고 있다고 생각하지만 실제로는 전혀 모른다. 내가하고 싶은 것은 뷰 사이를 앞뒤로 움직일 수있는 뷰 모델입니다.