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

baubqpgj  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(146)

我有一个具有以下模式的程序。
程序以登录开始,一旦用户输入用户名和密码,它就指向主窗口(在那里传递值没有问题,因为它是在表单之间)。该窗口使用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,后者根据菜单上按下的按钮调用 UserControlContentControl 是绑定的,并使用MVVM模型加载 UserControl
问题是 UserControl 没有使用MVVM架构(只有加载部分使用MVVM)。它们使用直接WPF模型(.cs和.xaml)直接在c#中操作,因此 UserControl ViewModel没有绑定Model UserControl 中的任何内容。
我想找到一种方法将登录信息传递给被调用的 UserControl。每次更改 ContentControl 时,新的 UserControl 都可以访问登录数据。
是否有任何方法可以创建一个类似全局的变量,该变量可以由登录或主窗口发布,并由每个UserControl读取?

pod7payv

pod7payv1#

这并不完全是我想要的,但我通过使用项目属性做到了这一点。
我把它放在loggin里,然后把它放在我想要的窗口里。

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

相关问题