解决
拜托,我需要一些帮助!
Android情况:
MSVisualStudio 2015 + Xamarin + Mvvmcross 4.4
一个活动和几个片段。使用默认演示者。
1-使用MvxRecyclerView查看(片段),选择一行进行编辑。
2-使用MvxSpinner显示新视图(片段),并将其值(A)更改为另一个(B)。记住:A& B是对象。
<Mvx.MvxSpinner
android:id="@+id/spinner_academic_start_week"
android:layout_width="match_parent"
android:layout_height="wrap_content"
local:MvxDropDownItemTemplate="@layout/spinner_basic"
local:MvxItemTemplate="@layout/item_spinner_basic"
local:MvxBind="ItemsSource AcademicYearWeeksCollection; SelectedItem AcademicStartWeek; HandleItemSelected SelectAcademicStartWeekCommand" />
并且有一个带
的ViewModelpublic IList<AcademicYearWeeks> AcademicYearWeeksCollection { get { return _academicYearWeeksCollection; } }
其中 AcademicYearWeeks 是一个具有属性等的类。
3-取消版本并返回使用MvxRecyclerView查看。
4-重复单击以编辑同一行。
5- Oooppps! Spinner显示B不是A.为什么????
其他考虑因素:
使用
调用带有微调器的片段ShowViewModel<CourseViewModel>(
new
{
courseId = item.CourseId
});
与其ViewModel相关联
public void Init(int courseId)
{
_courseId = courseId;
}
public override void Start()
{
base.Start();
LoadAcademicYearWeeksCollection();
if (_courseId == 0)
NewCourse();
else
LoadCourse();
}
并使用
关闭Close(this)
我会非常感激!
感谢。
答案 0 :(得分:0)
使用MvxFragment
属性创建片段时,默认情况下IsCacheableFragment
设置为true。因此,当片段和ViewModel被缓存时,您将获得第二次返回页面时遇到的行为。
理想情况下,您应该只能将IsCacheableFragment
设置为false
[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame,
IsCacheableFragment = false)]
但是,我相信这个功能的行为是不受欢迎的。根据{{3}},它将您的ViewModel设置为null。
您可以尝试另一种方法来强制片段和ViewModel对刷新自己。在您的片段中,父级活动会覆盖ShowFragment
并将forceAddToBackStack
设置为带有微调器的ViewModel的真实
protected override void ShowFragment(string tag, int contentId, Bundle bundle, bool forceAddToBackStack = false, bool forceReplaceFragment = false)
{
if (tag.Equals(typeof(<<Your View Model Type>>).FullName))
forceReplaceFragment = true;
base.ShowFragment(tag, contentId, bundle, forceAddToBackStack, forceReplaceFragment);
}