小编dim*_*boi的帖子

在ViewModelViewHost控件中托管的Views和ViewModel中使用时,调用两次WhenActivated

我的应用程序使用实现IViewFor<T>界面的视图.视图已在依赖项解析程序中注册AppBootstrapper.应用程序ViewModelViewHost通过为控件的ViewModel属性分配相应的视图模型来使用控件显示视图.所有视图模型都实现了ISupportsActivation接口.

我注意到它WhenActivated被叫了两次.首先,当视图和视图模型被激活时调用它.然后在停用时,处理所有一次性用品并WhenActivated立即再次调用,然后处理一次性用品.

我在视图和视图模型中使用以下代码进行测试:

this.WhenActivated(disposables =>
{
    Debug.WriteLine("ViewModel activated.");

    Disposable
        .Create(() =>
        {
            Debug.WriteLine("ViewModel deactivated.");
        })
        .AddTo(disposables);
});
Run Code Online (Sandbox Code Playgroud)

结果输出如下:

// App displays the view:

ViewModel activated.
View activated.

// App hides the view:

ViewModel deactivated.
View deactivated.
ViewModel activated.
View activated.
ViewModel deactivated.
View deactivated.
Run Code Online (Sandbox Code Playgroud)

通过将ViewModelViewHost控件的ViewModel属性设置为null来隐藏视图.

难道我做错了什么?

编辑:这是完整的源代码:https://gist.github.com/dmakaroff/e7d84e06e0a48d7f5298eb6b7d6187d0

按第一个Show然后按Hide按钮将产生以下输出:

SubViewModel activated.
SubView activated.
SubViewModel deactivated.
SubView deactivated.
SubViewModel activated.
SubView activated.
SubViewModel deactivated. …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf reactiveui

6
推荐指数
1
解决办法
853
查看次数

标签 统计

.net ×1

c# ×1

reactiveui ×1

wpf ×1