0

我有一些用户控件的场景假设它们是:

  1. 创建学生
  2. 创建教师

每个用户控件都有自己的视图模型。数据上下文在初始化中设置。

我有一个主 UI,可以在其中加载上述用户控件。所以设置数据上下文工作正常。

问题陈述 我有另一个用户控件“CreateClass”,它是选项卡的集合。从这里我可以转到上面的两个用户控件(隐藏选项卡)。

数据上下文由 CreateClassViewModel“CreateStudentManager”和“CreateTeacherManager”中的两个属性设置。

这很好用,但问题是当我默认打开 CreateClass UI 时,其他用户控件也会加载(我猜是因为它们有默认构造函数)。

因为当我打开 CreateClass 时,我不想加载其他控件。这些应该仅在从 Create Class UI 显式调用时加载。

如何做到这一点?

下面是一个“CreateStudent”的示例

<TabItem Header="Students" Visibility="{Binding IsStudentVisible, Converter={StaticResource BooleanToVisibilityConverter}}" >
                <Grid>
                    <local:UCCreateStudent DataContext="{Binding CreateStudentManager}"/>
                </Grid>
            </TabItem>
  • 吉里哈
4

2 回答 2

0

关于codeproject有一篇很好的文章:http: //www.codeproject.com/Articles/217022/Delaying-Element-Initialization-for-Collapsed-Cont

于 2013-12-30T09:20:33.920 回答
0

最简单的方法是在代码中完成,即。将 local:UCCreateStudent 项目添加到所需事件触发器的网格中。给网格命名(例如 x:Name="MyGrid"),然后

 void OnTrigger(...)
 {
      UCCreateStudent NewStudent = new UCCreateStudent();
      // extra code for setting the datacontext and any other layout properties
      MyGrid.Children.Add(NewStudent);
 }
于 2012-05-01T07:36:13.907 回答