Передайте переменную от родителя к потомку в гибридной схеме MVFM-usercontrol WPF - PullRequest
0 голосов
/ 05 марта 2019

У меня есть программа со следующей схемой.

Программа запускается с логином, как только пользователь вводит имя и пароль, которые он направляет в главное окно (нет проблем с передачей значений там, как междуформы).В этом окне используется схема 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).Они напрямую работают в c # с использованием прямой модели WPF (.cs и .xaml), поэтому UserControl ViewModel ничего не связывает в Model UserControl .

Я хочу найти способ передачи информации для входа в систему вызываемому UserControl .Таким образом, каждый раз, когда он меняет ContentControl , новый UserControl будет иметь доступ к данным для входа в систему.

Есть ли способ создать глобальный аналогпеременная, которая может быть опубликована в логине или главном окне, а также для чтения каждым из пользовательских элементов управления?

1 Ответ

0 голосов
/ 14 марта 2019

Это не совсем то, что я хотел, но я добился цели, используя свойства проекта.

Я установил его в логине и получил в желаемом окне.

    object  myProperty = App.Current.Properties["Test"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...