我有大量的 ViewModel 类。对于这些类中的每一个,都有一个相应的 .xaml 文件,它是一个“UserControl”。在我的 App.xaml 中,我将它们注册为 DataTemplate,如下所示:
<DataTemplate DataType="{x:Type viewModel:MainMenuViewModel}">
<view:MainMenuView/>
</DataTemplate>
想法是 WPF 将能够在运行时自动交换必要的用户控件。例如,这有效:
<Grid>
<StackPanel>
<TextBlock Text="SuperApp" />
<ItemsControl>
<ViewModels:MainMenuViewModel/>
</ItemsControl>
</StackPanel>
</Grid>
其中“MainMenuViewModel”条目自动被 MainMenuView 替换,绑定(bind)到 MainMenuViewModel。伟大的。我现在的目标是:我想要一个按钮,比如说,嵌入在 MainMenuView 中的一个 View ,它会打开一个弹出窗口,里面会有一个新的 ViewModel。这个想法是设置它,以便我有一个“通用”弹出表单,我在其中嵌入了一个任意 ViewModel,并让 WPF 处理使用 DataTemplates 实际呈现它,类似于上面的内容。所以我有一个绑定(bind)到按钮的命令,如下所示:
<Button Command="{Binding Path=LaunchInStandaloneForm}" Content="Rip Out"/>
它成功创建了一个新窗口,将 dataContext 设置为相应的 ViewModel,并显示该窗口。
问题是:如何设置此弹出窗口的 XAML,以便它为作为 DataContext 的 ViewModel 呈现适当的 DataTemplate?我试过了:
<Grid>
<ItemsControl ItemsSource="{Binding Path=.}">
</ItemsControl>
</Grid>
,但它出现空白。任何指针?
最佳答案
设置ItemsSource
到DataContext
, 使用 ItemsSource={Binding}
.假设 DataContext
是您的 View 模型对象的可枚举集合。
更新正确答案:
使用 ContentControl
:)
希望有帮助。
关于wpf - 如何在运行时使用 DataTemplates 将通用窗口绑定(bind)到任意 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363380/