Статьи

Начало работы с Windows Phone и MVVM Light — часть 2 из 2

В первой части мы рассмотрели следующее:

  • Создание приложения
  • Соединение 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 здесь

      GoingTo2ndPage2ndPsge