wpf - 如何在运行时使用 DataTemplates 将通用窗口绑定(bind)到任意 View 模型?

标签 wpf data-binding mvvm datatemplate

我有大量的 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>

,但它出现空白。任何指针?

最佳答案

设置ItemsSourceDataContext , 使用 ItemsSource={Binding} .假设 DataContext是您的 View 模型对象的可枚举集合。

更新正确答案:

使用 ContentControl :)

希望有帮助。

关于wpf - 如何在运行时使用 DataTemplates 将通用窗口绑定(bind)到任意 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363380/

相关文章:

wpf - 在 ItemsControl 中虚拟化高度为 * 的 ItemsControl

c# - WPF:创建 UserControl 还是 CustomControl?

wpf - 滚动/适合带有复选框的图像

wpf - 如何绑定(bind)和排序集合

wpf - 将父 View DataContext绑定(bind)到DataTemplate subview DataContext

c# - C++ 中的 XAML 桌面应用程序(Visual Studio Ultimate 2012 RC)

mysql - 关于更新 MySQL 数据库和我的 devexpress Gauge 值之间的数据问题的数据绑定(bind)问题?

wpf - IntegerUpDown 绑定(bind)问题

c# - 如何使用 Caliburn.Micro 将容器绑定(bind)到 MVVM 标准中的 ListView 控件?

WPF - 在使用 MVVM 的 3 层架构设计中将 DAL 放在哪里?