我正在设计一个遵循 MVVM 模式的 WPF 应用程序。在一个UserControl
中(实际上这种情况发生了很多次),因为它非常复杂,例如,TabControl
我想将它们分成几个 sub UserControl
。例如,在“主”视图中,我们称它为 MainUC,我有一个TabControl
,它有两个TabItem
。由于两者TabItem
实际上都包含很多 UI 元素,所以我设计了两个UserControl
,SubUCA 和 SubUCB,所以 MainUC 的 XAML 看起来是这样的:
<TabControl Name="mainUC" Grid.Row="0" >
<TabItem Header="Sub UC A" Name="SubUC1">
<local:SubUCA />
</TabItem>
<TabItem Header="Sub UC B" Name="SubUC2">
<local:SubUCB />
</TabItem>
</TabControl >
但现在我的问题是:我应该如何为这些安排 ViewModel(s) UserControl
?我目前使用的一种方法是只有一个 ViewModel 类(称为 MainUC_VM),并将DataContext
MainUC 的设置为此类实例(请注意,我没有使用依赖注入,所以我只是在代码隐藏中创建一个实例MainUC)。但是这样一来,MainUC_VM 类就会变得非常复杂,就像 MainUC 一样。所以我也想把 ViewModel 分成几个类。例如,在 MainUC_VM 类中,我可以有这样的属性
public SubUCA_VM SubVM1 { get; set; }
public SubUCB_VM SubVM2 { get; set; }
但是,由于我没有使用依赖注入(因为我们的团队还没有决定使用它),我怎样才能让 SubVM1DataContext
和 SubVM2 分别成为 SubUC1 和 SubUC2 的?我无法在 SubUCA 和 SubUCB 的代码隐藏中实例化一个,因为它们与 MainUC_VM 中的属性成员不同。
我能想到的一些方法是,1)将 SubUCA_VM 和 SubUCB_VM 类设为单例(这与默认情况下使用例如 MEF 的依赖注入的行为相同),或 2)EvengAggregator
用于通知对象的实例化。但在我看来,无论哪种方式似乎都增加了不必要的复杂性。这是否意味着要使用 MVVM,依赖注入几乎是必须的?有没有办法在不使用 DI 的情况下实现它?