在WPF中,何时调用View对象(MVVM模式)的构造函数?

时间:2011-07-27 09:42:25

标签: wpf mvvm

在以下文章中找到的示例应用程序中:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

在CustomerView视图中,如果在该视图的构造函数中放置断点,则第一次触发断点。对于显示的UserControl的后续实例,不会再次调用构造函数。

两个问题:

  1. 这是什么原因?
  2. 每次创建新的CustomerView时,我在哪里可以放置我想要执行的代码?

2 个答案:

答案 0 :(得分:2)

只创建了一个CustomerView。当您更改CustomerViewModel时,它不会创建新的CustomerView,而是会重复使用现有的{{1}}。

答案 1 :(得分:1)

视图刚创建一次的原因是它在TabControl / HeaderedContentControl中。

如果使用列表框,您会看到每次添加新的视图模型时,也会创建一个新视图。

 <ListBox ItemsSource="{Binding Path=Workspaces}">
 </ListBox>

而不是

 <HeaderedContentControl 
      Content="{Binding Path=Workspaces}"
      ContentTemplate="{StaticResource WorkspacesTemplate}"
      Header="Workspaces"
      Style="{StaticResource MainHCCStyle}"
      />

编辑:

  

每次创建新的CustomerView时,我在哪里可以放置我想要执行的代码?

如果您使用DataTemplates,您将永远不会自己创建新视图。您只需创建一个新的VM /对象,然后将其显示为DataTemplate。

如果您想自己创建视图,则必须先进行“查看第一”方法,然后将正确的ViewModel添加到创建的视图中。