我有ViewModel和DialogFragment用于查看此VM。 在核心中,我以这种方式展示VM
this.ShowViewModel<AnnotationEditViewModel>();
我在AnnotationEditDialogFragment.cs中有这段代码
[Register("AnnotationEditDialogFragment")]
public class AnnotationEditDialogFragment : MvxDialogFragment<AnnotationEditViewModel>
{
...
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
base.EnsureBindingContextSet(savedInstanceState);
var view = this.BindingInflate(Resource.Layout.text_annotation_dialog_fragment, null);
var titleAnnotationTextView = view.FindViewById<TextViewWithFont>(Resource.Id.titleAnnotationTextView);
var set = this.CreateBindingSet<AnnotationEditFragment, AnnotationEditViewModel>();
set.Bind(this).For(be => be.CanBeSaved).To(vm => vm.CanBeSaved);
set.Apply();
builder = new AlertDialog.Builder(Activity);
LayoutInflater inflater = Activity.LayoutInflater;
builder.SetView(view);
alertDialog = builder.Create();
return alertDialog;
}
...
}
我在Mainvresenter中用Showv方法请求我可以检测到这个请求。
如果在MainPresenter中输入此代码:
var textAnnotationDialogFragment = Activity.FragmentManager.FindFragmentByTag(nameof(AnnotationEditFragment)) as AnnotationEditFragment ?? new AnnotationEditFragment();
textAnnotationDialogFragment.Show(Activity.FragmentManager, nameof(AnnotationEditFragment));
如果我为ShowViewModel()输入此代码:
base.Show(request, fragmentRequest);
答案 0 :(得分:3)
问题:
1。 Presenter处理请求方法 - ViewModel Null
使用此方法,ViewModel
的{{1}}属性为null,因为片段上没有设置AnnotationEditFragment
,因为它是在创建普通{Mvx时正常生命周期之外创建的。 {1}}。 ViewModel
遵循不同的生命周期。
2。演示者未处理请求方法 - 无活动
使用这种方法,标准的Mvx片段生命周期试图在MvxFragments
上执行。这需要指定一个Activity来放置片段。这不是MvxDialogFragment
所需的方法。
<强>解决方案:强>
我认为方法1最接近于让我们成功实施工作MvxDialogFragment
。我们需要做的就是确保ViewModel贯穿其生命周期。因此,在MvxDialogFragment
中,请确保根据请求创建MvxDialogFragment
的实例并将其分配给MainPresenter
:
AnnotationEditViewModel
AnnotationEditFragment
用于确保根据Mvx ViewModel生命周期标准CIRS加载ViewModel:
- 构建 - 使用IoC进行依赖注入
- Init() - 导航参数的初始化
- ReloadState() - 墓碑后的补液
- Start() - 初始化和补液完成时调用
醇>