在混合WPF MVVM-usercontrol模式中将变量从父级传递到子级

时间:2019-03-05 01:19:20

标签: c# wpf xaml mvvm

我有一个具有以下架构的程序。

该程序从登录名开始,一旦用户输入了名称和密码,它就会定向到主窗口(在窗体之间传递值毫无问题)。该窗口使用MVVM架构加载当时需要的 ContentControl

<Window.Resources>
    <DataTemplate ...>
    </DataTemplate>  (several times)
</Window.Resources>
<DockPanel>
    <Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}">
        <Menu.ItemContainerStyle>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="Command" Value="{Binding Command}" />
            </Style>
        </Menu.ItemContainerStyle>
        <Menu.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
                <TextBlock Text="{Binding Header}"/>
            </HierarchicalDataTemplate>
        </Menu.ItemTemplate>
    </Menu>
    <ContentControl Content="{Binding CurrentPageViewModel}" >

    </ContentControl>
</DockPanel>

从代码中可以看到,它具有一个绑定菜单(不会改变)和一个 ContentControl ,根据所按的按钮调用 UserControl 出现在菜单上 ContentControl 已绑定,并使用MVVM模型加载 UserControl

问题是 UserControl 没有使用MVVM模式(仅加载部分使用了MVVM)。它们使用直接WPF模型(.cs和.xaml)在c#中直接运行,因此 UserControl ViewModel不会绑定模型 UserControl 中的任何内容。

我想找到一种方法来将登录信息传递给被称为 UserControl 的方法。每次更改 ContentControl 时,新的 UserControl 都将拥有登录数据。

是否有任何方法可以创建可通过登录名或主窗口发布并由每个UserControl读取的类全局变量?

1 个答案:

答案 0 :(得分:0)

这并不是我想要的,但是我通过使用项目属性来达到目的。

我在登录中设置它,并在我想要的窗口中获取它。

    object  myProperty = App.Current.Properties["Test"];