根据这个问题,使用 ReactiveUI 和 CM 应该是在公园里散步:ReactiveUI 和 Caliburn Micro 在一起? 但是我已经在婴儿阶段遇到了困难。
我将使用我通常的设置:
ShellViewModel + ShellView
以及不同形式的
ContentViewModel + ContentView
简单MEF
引导程序。
我也在使用 Fody 为 ReactiveUI 编织 PropertyChanged 和 PropertyChanging,但是如果没有 Fody,我也会得到错误。
[Export]
public class ShellViewModel : ReactiveObject
{
public ShellViewModel()
{
ActiveItem = new ContentViewModel();
}
public ContentViewModel ActiveItem { get; set; }
}
及其 XAML:
<Window x:Class="UiTest.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ShellView" Height="300" Width="300">
<ContentControl x:Name="ActiveItem"></ContentPresenter>
</Window>
另外两个文件是一个空类和用户控件。
在应用程序启动时,ReactiveUI.Core 中出现 StackOverflowException 异常,这意味着我必须做一些根本错误的事情。顺便说一句,如果有人有的话,我会喜欢某种最新的文档。
更新
我只在使用 RxUI 5.x 时收到错误,而不是在使用 RxUI 4.x 时。我已经排除了 MEF 令人讨厌:如果我将 ContentViewModel 设置为 ReactiveObject 而不是 ShellViewModel,它仍然会给我们带来很好的堆栈溢出。顺便说一句,这发生在 ctor 身上。Caliburn 还没有涉及任何内容,所以我想我应该更改主题标题。
堆栈跟踪:
System.Reactive.Core.dll!System.Reactive.ObserverBase<System.Exception>.ObserverBase() + 0x23 bytes
System.Reactive.Core.dll!System.Reactive.AnonymousObserver<System.Exception>.AnonymousObserver(System.Action<System.Exception> onNext, System.Action<System.Exception> onError, System.Action onCompleted) + 0x38 bytes
System.Reactive.Core.dll!System.Reactive.AnonymousObserver<System.Exception>.AnonymousObserver(System.Action<System.Exception> onNext) + 0x4c bytes
System.Reactive.Core.dll!System.Reactive.Observer.Create<System.Exception>(System.Action<System.Exception> onNext) + 0xd4 bytes
ReactiveUI.dll!ReactiveUI.RxApp.Initialize() + 0xb9 bytes
ReactiveUI.dll!ReactiveUI.RxApp.DependencyResolver.get() + 0x7c bytes
ReactiveUI.dll!ReactiveUI.RxApp.Initialize() + 0xcd bytes
ReactiveUI.dll!ReactiveUI.RxApp.DependencyResolver.get() + 0x7c bytes
ReactiveUI.dll!ReactiveUI.RxApp.Initialize() + 0xcd bytes
ReactiveUI.dll!ReactiveUI.RxApp.DependencyResolver.get() + 0x7c bytes
ReactiveUI.dll!ReactiveUI.RxApp.Initialize() + 0xcd bytes
ReactiveUI.dll!ReactiveUI.RxApp.DependencyResolver.get() + 0x7c bytes
...大约 100.000 行之后:
ReactiveUI.dll!ReactiveUI.RxApp.Initialize() + 0xcd bytes
ReactiveUI.dll!ReactiveUI.RxApp.DependencyResolver.get() + 0x7c bytes
The maximum number of stack frames supported by Visual Studio has been exceeded.