xamarin - MVVMCross MvxDialogFragment 恢复问题 - 没有 MvxFragmentPresentationAttribute
问题描述
我已经从 4.2.3 升级到最新版本的 MvvmCross (6.4.1)。我和使用 Xamarin Android 不是 Xamarin 形式
在启动对话框的视图中,我执行以下操作
- 创建从 MvxDialogFragment 派生的对话框片段
- 为其分配视图模型
- 然后在片段上调用 ShowView
但是,当我旋转设备时,它在 OnCreate 中失败并显示消息
Your fragment is not generic and it does not have MvxFragmentPresentationAttribute attribute set!
这在 4.2.3 中没有发生。我以这种方式创建对话框的原因是我希望它根据我需要此对话框的位置使用不同的视图模型。例如,我想在对话框中显示不同的数据列表,但格式相同。
似乎这只有在我们应用 MvxFragmentPresentationAttribute 时才有效,它需要在设计时而不是运行时定义视图模型的类型。
我能做些什么来实现这一目标吗
任何帮助将不胜感激
解决方案
如果您需要在运行时以某种方式指定 ViewModel 类型,您可以代替使用MvxFragmentPresentationAttribute
let 它实现来装饰类,IMvxOverridePresentationAttribute
并使用要呈现的适当 ViewModel 将其返回到那里。
就像是:
public class MyDialog : MvxDialogFragment, IMvxOverridePresentationAttribute
{
public MvxBasePresentationAttribute PresentationAttribute(MvxViewModelRequest request)
{
return new MvxFragmentPresentationAttribute
{
ActivityHostViewModelType = myDynamicType
};
}
}
你在哪里实现某种逻辑来到达myDynamicType
某个地方。
但是,您应该可以MvxDialogFragmentPresentationAttribute
改用,如果您提供null
ref 作为ActivityHostViewModelType
.
推荐阅读
- node.js - 如何使用后端进行 MDC Web?(node.js 后端文件)
- android - 如何使用 Mockk 模拟和测试 RxJava/RxAndroid?
- java - Java.lang.ClassCastException:模型类无法转换为模型类
- r - R Markdown:隐藏剧透文本(悬停在文本元素上)
- php - 查询接口在 PHP 中究竟是如何工作的
- azure-web-app-service - 使用 Visual Studio Team Services 为控制台应用程序创建构建管道
- lstm - RNN / LSTM 的测试/验证数据的形状
- python - 带彩条的圆图
- html - JAWS 不读取输入类型文本字段值
- python-3.x - 启动 SparkSession 的区别