我相信至少在代码中将它们聚集在一起Controls
并且是痛苦的。IoC
可能有人会争论,但 IMO 避免这种痛苦的最佳做法是MVVM
。您将拥有可以自由构建的视图模型,Unity
并将您需要的所有内容注入其中。您将拥有绑定到 viewModel 的视图,而无需知道任何控制反转的情况。
更新:根据评论:
应用程序.xaml.cs:
private void HandleStartup(object sender, StartupEventArgs e)
{
var container = CreateContainer(); // create IoC container
var mainViewModel = container.Resolve<MainViewModel>();
var shell = new Shell { DataContext = mainViewModel }; // main View
MainWindow = shell;
shell.Show();
}
外壳 XAML 示例:
<UserControl>
<StackPanel>
<ContentPresenter Content="{Binding ViewModel1}" />
<ContentPresenter Content="{Binding ViewModel2}" />
<ContentPresenter Content="{Binding ViewModel3}" />
</StackPanel>
</UserControl>
主视图模型:
public class MainViewModel
{
public ViewModel1 ViewModel1 { get; private set; }
public ViewModel2 ViewModel2 { get; private set; }
public ViewModel3 ViewModel3 { get; private set; }
// this will be handled by IoC container
public MainViewModel(ViewModel1 viewModel1, ViewModel2 viewModel2, ViewModel3 viewModel3)
{
ViewModel1 = viewModel1;
ViewModel2 = viewModel2;
ViewModel3 = viewModel3;
}
通过这种方式,您的视图将不知道 IoC,并且您想要在 viewModels 中的所有内容都将成功注入。
UPDATE2 DataTemplating 汇集Views
了ViewModels
:
应用程序.xaml
<Application.Resources>
<DataTemplate DataType="{x:Type local:ViewModel1}">
<View1 />
</DataTemplate>
</Application.Resources>