【发布时间】:2019-01-25 12:36:04
【问题描述】:
我有一个带有多个框架的窗口。每个框架包含一个或多个页面。所有页面使用相同的 ViewModel。我控制每个 Frame 的 Visibility 来操作 UI。
我最近意识到,当我的程序启动时,每个页面都会触发 ViewModel 的相同构造函数(因此相同的构造函数会触发多次)(构造函数中的简单 MessageBox.Show 在启动时会触发多次) .为什么会发生这种情况对我来说有点道理,但不是我想要的。
另外,我开始相信我在 C# 中处理不同框架时遇到问题的原因是因为我可能创建了 ViewModel 的新“对象”?我不确定这是不是正在发生的事情,但我很确定这不是我想要的。
有没有办法为页面设置 DataContext(在 Xaml 中),以便构造函数只触发一次,但仍将每个页面的 DataContext 设置为 ViewModel?还是我应该探索一种不同的方法?我还在学习中……
每个页面都有以下 Xaml:
<Page.DataContext>
<ViewModel:ActiveJobViewModel/>
</Page.DataContext>
我的框架看起来像这样。我意识到一个框架可以容纳多个页面,但操纵可见性给了我更好的性能,我不希望每次页面源更改时都运行构造函数。
<Frame Source="ActiveJobPage.xaml" Grid.Row="2" Grid.Column="3"
Visibility="{Binding ElementName=ActiveJobPageToggleButton, Path=IsChecked, Converter={StaticResource booleanToVisibility}, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource FramePage}">
</Frame>
<Frame Source="CustomerPage.xaml" Grid.Row="2" Grid.Column="3"
Visibility="{Binding objHomePage_PageVisibility.CustomersPageToggleButtonIsChecked, Converter={StaticResource booleanToVisibility}, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource FramePage}">
</Frame>
【问题讨论】:
标签: wpf mvvm datacontext