Использование данных из 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, но в этот момент это может быть проблемой тестирования.