首页 > 解决方案 > MVVMCross MvxDialogFragment 恢复问题 - 没有 MvxFragmentPresentationAttribute

问题描述

我已经从 4.2.3 升级到最新版本的 MvvmCross (6.4.1)。我和使用 Xamarin Android 不是 Xamarin 形式

在启动对话框的视图中,我执行以下操作

但是,当我旋转设备时,它在 OnCreate 中失败并显示消息

Your fragment is not generic and it does not have MvxFragmentPresentationAttribute attribute set!

这在 4.2.3 中没有发生。我以这种方式创建对话框的原因是我希望它根据我需要此对话框的位置使用不同的视图模型。例如,我想在对话框中显示不同的数据列表,但格式相同。

似乎这只有在我们应用 MvxFragmentPresentationAttribute 时才有效,它需要在设计时而不是运行时定义视图模型的类型。

我能做些什么来实现这一目标吗

任何帮助将不胜感激

标签: xamarindialogmvvmcross

解决方案


如果您需要在运行时以某种方式指定 ViewModel 类型,您可以代替使用MvxFragmentPresentationAttributelet 它实现来装饰类,IMvxOverridePresentationAttribute并使用要呈现的适当 ViewModel 将其返回到那里。

就像是:

public class MyDialog : MvxDialogFragment, IMvxOverridePresentationAttribute
{
    public MvxBasePresentationAttribute PresentationAttribute(MvxViewModelRequest request)
    {
        return new MvxFragmentPresentationAttribute
        {
            ActivityHostViewModelType = myDynamicType
        };
    }
}

你在哪里实现某种逻辑来到达myDynamicType某个地方。

但是,您应该可以MvxDialogFragmentPresentationAttribute改用,如果您提供nullref 作为ActivityHostViewModelType.


推荐阅读