Использование данных из ViewModel в ModalDialog, даже если они находятся в командной консоли

Я пишу UWP и использую Шаблон 10.

Я создал ModalDialog, который должен показывать пользователю некоторые данные, которые были только что рассчитаны в ViewModel.

Вот где я потерялся:

# 1, ModalDialog нужны данные из моей ViewModel. # 2, ModalDialog должен вызывать методы 1+ в ViewModel в зависимости от того, какую кнопку нажимает пользователь.

Мой Shell.xaml.cs:

public sealed partial class Shell : Page
{
    public static Shell Instance { get; set; }
    public static HamburgerMenu HamburgerMenu => Instance.MyHamburgerMenu;


    public Shell()
    {
        Instance = this;
        InitializeComponent();
        if (App.MobileService.CurrentUser == null)
            LoginModal.IsModal = true;
    }

    public Shell(INavigationService navigationService) : this()
    {
        SetNavigationService(navigationService);
    }

    public void SetNavigationService(INavigationService navigationService)
    {
        MyHamburgerMenu.NavigationService = navigationService;
    }

    #region Login

    private void LoginLoggedIn(object sender, EventArgs e)
    {
       MyHamburgerMenu.NavigationService.Navigate(typeof(Views.MainPage));
       LoginModal.IsModal = false;
    }

    #endregion
}

}

Shell.xaml

<Controls:ModalDialog x:Name="ScoreModal" Grid.RowSpan="3"
                          CanBackButtonDismiss="False"
                          DisableBackButtonWhenModal="True">
        <Controls:ModalDialog.ModalContent>
            <myControls:QuizScorePart
                    HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        </Controls:ModalDialog.ModalContent>
    </Controls:ModalDialog>

Что я пробовал:

Я попытался просто поместить элемент управления для ModalDialog в View, который использует ViewwModel, с которой я хочу поговорить, но это не работает; это представление находится внутри оболочки, то есть все, что находится под ModalDialog, НЕ отключено. Это должно быть в Shell, насколько я знаю.

Я попытался установить метод в файле Shell.xaml.cs, который устанавливает IsModal для моего диалога в true/false; это работает, но это не решает мою проблему взаимодействия с моей ViewModel.

Я потерялся. Спасибо всем за помощь.

1 ответ

Решение

Обратитесь к примеру поиска, есть делегаты для обработки в фактической части, посмотрите на кодовый элемент для LoginPart....

В комментариях я указал, как я делаю это с помощью LoginPage, а не usercontrol. Который имеет LoginPageViewModel, который в свою очередь имеет ссылку на экземпляр SettingsService.

редактировать

Подумайте об этом так... ScoreModal - это не что иное, как другой элемент управления представлением. QuizScorePart - это ваш View, я предполагаю, что QuizScorePartViewModal существует. Оттуда это становится упражнением передачи сообщений между моделями представления. По крайней мере, это то, что я вижу после последнего комментария. Вы должны знать, что пользователь нажал на кнопку. Если предположить, что вышеприведенное верно, то QuizViewModel будет реагировать на сообщение, которое оно прослушивает. Оболочка - это просто место для хранения всего экрана, поскольку она реагирует только на IsModal. Если это проблема, рассмотрите возможность удержания кнопки выбранной службой, аналогично тому, как работает SettingsService. Ничто не говорит о том, что QuizScorePart не может установить свой текстовый текст данных в QuizViewModel, но в этот момент это может быть проблемой тестирования.

Другие вопросы по тегам