- Создание приложения
- Соединение View и View-Model
- Добавление дополнительного просмотра или страницы
Во второй части мы увидим, как добавить кнопку на первой странице для перехода на вторую страницу, которая будет охватывать навигацию и обмен сообщениями, чтобы завершить приложение, и, хотя и является базовой, даст довольно приличное начало для создания и публикации вашего первого приложения Rubber Ducky. ,
Если вам нужен код, вы можете получить его здесь .
Начнем с открытия MainPage.xaml. Вы должны увидеть следующее изображение здесь:
Добавьте кнопку, перетащив ее на поверхность конструктора или добавив следующий код, не важно где, где-то внутри сетки содержимого.
<TextBlock Text="{Binding Welcome}" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40" /> <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="154,354,0,0" Name="button1" VerticalAlignment="Top" Width="160" />
Далее, давайте добавим возможности обмена сообщениями, которые будут работать рука об руку с переходом с одной страницы на другую. Начните с добавления новой папки в решение под названием « Сообщения ».
Затем добавьте новый класс с именем NavigateToPageMessage.cs, который содержит следующий код.
public class NavigateToPageMessage { public NavigateToPageMessage() { } public string PageName { get; set; } }
Теперь нам нужно зарегистрировать главную страницу приложения, чтобы получить NavigateToPageMessage, и сделать что-то, как только оно его получит. Откройте MainPage.xaml и добавьте новый обработчик события Loaded Event. Сделайте это, выбрав PhoneApplicationPage в окне «Структура документа», перейдите в окно «Свойства», выберите вкладку «События» и дважды щелкните событие « Loaded», чтобы вставить код. Откройте код MainPage.xaml.cs и найдите вновь вставленный обработчик событий, который должен выглядеть следующим образом:
private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e) { }
Для поддержки обмена сообщениями из MVVM Light добавьте пространство имен обмена сообщениями (MvvmLight1.Messages;) в верхней части страницы. Далее мы добавим код для подписки на NavigateToPageMessage.
private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e) { Messenger.Default.Register<NavigateToPageMessage> ( this, (action) => ReceiveMessage(action) ); }
ReceiveMessage — это делегат, который будет обрабатывать объект сообщения, в данном случае тип NavigateToPageMessage.
private object ReceiveMessage(NavigateToPageMessage action) { var page = string.Format("/Views/{0}View.xaml", action.PageName); if (action.PageName == "Main") { page = "/MainPage.xaml"; } NavigationService.Navigate( new System.Uri(page, System.UriKind.Relative)); return null; }
Здесь мы обработали свойство PageName действия и приложения, чтобы перейти на соответствующую страницу. Довольно просто, верно? Вы заметите, что я вставил здесь специальный обработчик, если PageName имеет значение Main, чтобы следовать структуре по умолчанию в шаблоне MVVM Light. Как примечание, я обычно перемещаю MainPage в папку Views и настраиваю всю проводку так, чтобы все мои виды были там, где они мне нравятся. Следующим шагом является подключение этой кнопки, которую мы добавили ранее, для отправки NavigateToPageMessageкогда его нажали. Если у вас есть Blend, эта часть перетаскивается, в противном случае вам придется немного вырезать и вставить. Откройте проект в Blend, затем откройте MainPage.xaml в конструкторе. Выберите вкладку «Ресурсы» и нажмите «Поведение» на левой панели. Вы увидите выбор с именем EventToCommand; щелкните и перетащите этот элемент либо на кнопку на поверхности конструктора, либо на кнопку на объекте и временной шкале и отпустите. Затем на вкладке свойств присвойте новому EventToCommand имя «GoToPage2», EventName уже должен установить значение Click , если оно не изменилось. Сохраните ваши изменения, и если вы просматриваете xaml сейчас, вы должны увидеть следующий код
<Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="154,354,0,0" x:Name="button1" VerticalAlignment="Top" Width="160" > <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <GalaSoft_MvvmLight_Command:EventToCommand x:Name="GoToPage2" Command="{Binding GoToSecondPageCommand, Mode=OneWay}"/> </i:EventTrigger> </i:Interaction.Triggers> </Button>
Следующим шагом вернемся в Visual Studio, чтобы добавить последний бит кода в MainViewModel. Добавьте новый RelayCommand, который находится в пространстве имен MvvmLight.Command.
public RelayCommand GoToSecondPageCommand { get; private set; }
Затем в конструкторе в части «else» вам нужно создать экземпляр RelayCommand и добавить обработчик для отправки сообщения. Добавьте следующий код
GoToSecondPageCommand = new RelayCommand(() => { MessageBox.Show("Going to Second Page now"); Messenger.Default.Send<NavigateToPageMessage>(new NavigateToPageMessage() { PageName = "SecondPage" }); });
Один из последних шагов здесь — сообщить EventToCommand, который мы добавили в Blend, что это команда, которая должна выполняться при срабатывании события Click. мы делаем это, устанавливая свойство Command в xaml следующим образом:
<Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="154,354,0,0" x:Name="button1" VerticalAlignment="Top" Width="160" > <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <GalaSoft_MvvmLight_Command:EventToCommand x:Name="GoToPage2" Command="{Binding GoToSecondPageCommand, Mode=OneWay}"/> </i:EventTrigger> </i:Interaction.Triggers> </Button>
Сохраните все и запустите. Нажмите Ok, и появится следующая страница. Теперь иди создавать приложения! Скачать код для части 2 здесь