【发布时间】:2011-07-27 09:42:25
【问题描述】:
在以下文章中的示例应用程序中:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
在 CustomerView 视图中,如果您在该视图的构造函数中放置断点,则第一次命中断点。对于显示的该 UserControl 的后续实例,不会再次调用构造函数。
两个问题:
- 这是什么原因?
- 我可以在哪里放置每次创建新 CustomerView 时要执行的代码?
【问题讨论】:
在以下文章中的示例应用程序中:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
在 CustomerView 视图中,如果您在该视图的构造函数中放置断点,则第一次命中断点。对于显示的该 UserControl 的后续实例,不会再次调用构造函数。
两个问题:
【问题讨论】:
只创建了一个CustomerView。当您更改 CustomerViewModel 时,它不会创建新的 CustomerView,它会重用现有的。
【讨论】:
视图只创建一次的原因是它在 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 添加到创建的视图中。
【讨论】: