【发布时间】:2018-08-01 21:53:13
【问题描述】:
我正在使用 MvvmCross 编写 WPF 应用程序。我想要一个自定义视图演示者。这是我写的:
public class ViewPresenter : MvxWpfViewPresenter
{
ContentControl _contentControl;
FrameworkElement _currentContentView;
FrameworkElement _rootContentView;
public ViewPresenter(ContentControl c)
{
_contentControl = c;
AddPresentationHintHandler<SetRootHint>(SetRootHintHandler);
AddPresentationHintHandler<PopToRootHint>(PopToRootHintHandler);
}
protected override void ShowContentView(FrameworkElement element, MvxContentPresentationAttribute attribute, MvxViewModelRequest request)
{
base.ShowContentView(element, attribute, request);
_currentContentView = element;
}
private bool SetRootHintHandler(SetRootHint hint)
{
_rootContentView = _currentContentView;
return true;
}
private bool PopToRootHintHandler(PopToRootHint hint)
{
return true;
}
}
我正在我的Setup 类中注册它:
public class Setup : MvxWpfSetup<Core.App>
{
protected override IMvxWpfViewPresenter CreateViewPresenter(ContentControl root)
{
return new ViewPresenter(root);
}
}
一旦我尝试显示我的第一个视图,它就会在这一行崩溃:
base.ShowContentView(element, attribute, request);
带有消息:
System.InvalidOperationException: '序列不包含元素'
如果我不覆盖ShowContentView,它仍然会崩溃。如果我不打电话给base.ShowContentView(element, attribute, request),它就不会显示我的视图。
编辑
在我的 Visual Studio 环境中启用Common Language Runtime Exceptions 后,我可以看到异常实际上来自mscorlib.dll,并要求AsyncMethodBuilder.cs 在引发异常时查看调用堆栈帧的源。我所有的 nuget 包都是最新的,并且在 Windows 10 上运行。我相信 WPF 自 Windows 10 起已被弃用。我的 WPF 项目面向 .NET 4.7.2,而我的核心项目面向 .NET Standard 2.0。但我仍然不知道如何解决这个问题。我也在使用最新的 MvvmCross (6.1.2.0)。
编辑 2
我在这里做了一个同样问题的小示例应用程序:
https://drive.google.com/file/d/1uROc8TYzWdx54BV8LtgCNLtwhc_MhXq3/view?usp=sharing
【问题讨论】:
-
您使用的是哪个版本的 MvvmCross?如果它是最新的(6.1.2),我建议尝试打开源链接,它可以让您调试 mvvm 跨源,并可能让您更好地理解问题。查看Nick's post 的相关信息。如果您仍然无法弄清楚,请从您收到的异常中添加一些堆栈跟踪
-
谢谢。我编辑了我的帖子。
-
抱歉,您需要提供更多信息(可能是堆栈跟踪)以了解实际发生的情况以确定可能是什么问题。不过,WPF 绝对没有在 Windows 10 上被弃用。也许还可以查看 MvvmCross github 存储库中的 WPF playground 示例,以检查您可能缺少的内容。其他建议是创建一个简单的 github repro 示例,以便我查看
-
我制作了一个具有相同问题的小示例应用程序,并将其链接放在原始帖子中。感谢您的帮助!
-
您的示例应用程序不再可用。你能和我分享一下吗?我正在尝试开始使用 MVVM Cross,但很难找出它是如何在琐碎的东西之上结合在一起的。
标签: mvvmcross