Я использую MVVMCross с Xamarin для разработки приложения для Android. У меня есть переменная _currentCommand, которая не изменяется в пределах свойства, как я ожидал. У меня есть этот ViewModel: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 не может иметь сеттеров и быть приватным (поэтому его можно модифицировать только в моем FooNavigationViewModel) и возвращаться с одним значением, а затем сразу иметь другое значение. Я предполагаю, что что-то странное происходит с отражением и MVVMCross, но на самом деле понятия не имею. Все, что я хочу сделать, это иметь модель представления, которая позволяет мне делать шаг вперед и назад между представлениями