为什么每次创建新的视图模型时视图构造函数都不会被调用? [英] Why the view constructor is not called every time I create a new viewmodel?

查看:204
本文介绍了为什么每次创建新的视图模型时视图构造函数都不会被调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用WPF与model-view-viewmodel模式。我有一个ResultsView和ResultsViewModel这样连接:

I am using WPF with model-view-viewmodel pattern. I have a ResultsView and ResultsViewModel which are connected like this:

            <DataTemplate DataType="{x:Type VM:ResultsViewModel}">
                <VW:ResultsView/>
            </DataTemplate>



在我的主窗口中我有一些分页设置,其中MainContent属性存储当前页面(ViewModel实例)。

In my main window I have some kind of paged setup where MainContent property stores the current page (ViewModel instance).

我创建这样的页面

MainContent = new ResultsViewModel();

ResultsView基于UserControl,它还有一个Loaded事件的处理程序,它负责一些UI初始化。

ResultsView is based on UserControl, it also has a handler for Loaded event which does some UI initialization stuff.

当用户在不同页面之间导航时,一切都正常。

Everything works fine while the user is navigating between different pages.

但如果用户打开ResultsView次,则ResultsView构造函数第二次调用,并且Loaded事件也不会被调用。看起来现在我有相同的旧的ResultsView实例附加到新的ResultsViewModel()!

But if the user opens the ResultsView two times in a row, the ResultsView constructor is not called the second time, and also Loaded event is not called. It seems that now I have the same old ResultsView instance attached to the new ResultsViewModel()!

为什么WPF不创建一个新的View每次创建一个新的ViewModel?如果旧的视图模型被销毁,是否有一些方法可以强制WPF舍弃旧视图?

推荐答案

<DataTemplate x:Shared="False" DataType="{x:Type VM:ResultsViewModel}">
    <VW:ResultsView/>
</DataTemplate>

这篇关于为什么每次创建新的视图模型时视图构造函数都不会被调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆