我有大量的ViewModel类。对于这些类中的每一个,都有一个相应的.xaml文件,它是一个'UserControl'。在我的App.xaml中,我将它们注册为DataTemplates,如下所示:
<DataTemplate DataType="{x:Type viewModel:MainMenuViewModel}">
<view:MainMenuView/>
</DataTemplate>
理念是WPF将能够在运行时自动交换必要的用户控件。例如,这有效:
<Grid>
<StackPanel>
<TextBlock Text="SuperApp" />
<ItemsControl>
<ViewModels:MainMenuViewModel/>
</ItemsControl>
</StackPanel>
</Grid>
因为条目“MainMenuViewModel”被MainMenuView自动替换,绑定到MainMenuViewModel。大。我现在的目标是这样的:我想要一个按钮,例如,嵌入在MainMenuView中的视图,它打开一个弹出窗口,里面会有一个新的ViewModel。我的想法是设置它,以便我有一个“通用”弹出窗体,其中我嵌入了一个任意的ViewModel,让WPF处理实际上使用DataTemplates渲染它,类似于上面的。所以我有一个命令绑定到一个按钮,如下所示:
<Button Command="{Binding Path=LaunchInStandaloneForm}" Content="Rip Out"/>
成功创建一个新窗口,将dataContext设置为等于相应的ViewModel,并显示该窗口。
问题是:如何设置此弹出窗口的XAML,以便为ViewModel(DataContext)呈现相应的DataTemplate?我试过了:
<Grid>
<ItemsControl ItemsSource="{Binding Path=.}">
</ItemsControl>
</Grid>
,但它出现了空白。有什么指针吗?
答案 0 :(得分:1)
要将ItemsSource
设置为DataContext
,请使用ItemsSource={Binding}
。这假定DataContext
是View Model对象的可枚举集合。
使用正确答案进行更新:
使用ContentControl
:)
希望有所帮助。
答案 1 :(得分:0)