Samouczek Windows Phone 7 – MyTasks


Tak jak obiecałem jakiś czas temu, kontynuuję serię samouczka dla Windows Phone 7. Kolejną aplikacją jest MyTasks za pomocą której nauczymy się uruchamiać zewnętrzne aplikacje telefonu za pomocą kodu. Ponieważ wzoruję się na iPhone-nie gdzie do tego celu wykorzystywana jest metoda openUrl, muszę przyznać, że WP7 udostępnia bardziej bogaty interfejs i takie rzeczy jak wysłanie wiadomości SMS lub nawiązanie połączenia telefonicznego możemy wykonać za pomocą dedykowanych Task-ów z namespace-a Windows.Phone.Tasks. Zachęcam do przejrzenia całego namespace-a, jednak w mojej opinii jeszcze wiele elementów tam brakuje.

GUI

Tak jak w poprzednich aplikacjach interfejs aplikacji będzie dość prosty. Składał się będzie z 5 przycisków umieszczonych w gridzie.  Dla każdego przycisku musimy dodać Behavior ExecuteCommandAction, który spowoduje wykonanie odpowiedniej akcji z ViewModel-a.

<Grid x:Name="ContentGrid" Grid.Row="1">
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="*"/>
	</Grid.RowDefinitions>

        <Button Grid.Row="0" Content="Open Phone">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <nBehaviors:ExecuteCommandAction CommandBinding="{Binding OpenPhone, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
            <Button Grid.Row="1" Content="Open SMS">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <nBehaviors:ExecuteCommandAction CommandBinding="{Binding OpenSMS, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
            <Button Grid.Row="2" Content="Open Email">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <nBehaviors:ExecuteCommandAction CommandBinding="{Binding OpenEmail, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
            <Button Grid.Row="3" Content="Open Map">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <nBehaviors:ExecuteCommandAction CommandBinding="{Binding OpenMap, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
            <Button Grid.Row="4" Content="Open Browser">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <nBehaviors:ExecuteCommandAction CommandBinding="{Binding OpenBrowser, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
        </Grid>
</Grid>

Następnie musimy odpowiednio oprogramować nasz ViewModel dodając publiczne Property typu ActionCommand a następnie je zainicjalizować. Użycie poszczególnych Task-ów jest bardzo proste. Wystarczy, że utworzymy obiekt danego Task-a, ustawimy odpowiednie Property tego obiektu a na końcu wywołamy metodę Show(). Kod mojego ViewModelu poniżej:

[MapViewModel(typeof(MainPage))]
    public class MainPageViewModel : ViewModelBase
    {
        public MainPageViewModel()
        {
            InitCommands();
        }

        public ActionCommand OpenPhone { get; private set; }
        public ActionCommand OpenSMS { get; private set; }
        public ActionCommand OpenEmail { get; private set; }
        public ActionCommand OpenMap { get; private set; }
        public ActionCommand OpenBrowser { get; private set; }

        private void InitCommands()
        {
            OpenPhone = new ActionCommand(() =>
            {
                var phoneCallTask = new PhoneCallTask
                {
                    DisplayName = "Test Number",
                    PhoneNumber = "0123456789"
                };

                phoneCallTask.Show();
            });

            OpenSMS = new ActionCommand(() =>
            {
                var smsComposeTask = new SmsComposeTask
                {
                    To = "0123456789",
                    Body = "Windows Phone 7 Test SMS"
                };

                smsComposeTask.Show();
            });

            OpenEmail = new ActionCommand(() =>
            {
                var emailComposeTast = new EmailComposeTask
                {
                    To = "test@test.com",
                    Subject = "Windows Phone Test Email",
                    Body = "Wow!"
                };

                emailComposeTast.Show();
            });

            OpenMap = new ActionCommand(() =>
            {
                var searchTask = new SearchTask
                {
                    SearchQuery = "Marszałkowska, Warsaw, Poland"
                };

                searchTask.Show();
            });

            OpenBrowser = new ActionCommand(() =>
            {
                var webBrowserTask = new WebBrowserTask
                {
                    URL = "https://arturlipski.wordpress.com"
                };

                webBrowserTask.Show();
            });
        }
    }

I to wszystko 🙂 Zapraszam do czytania moich kolejnych postów 🙂

Reklamy

~ - autor: kaprys12 w dniu Sierpień 26, 2010.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

 
%d blogerów lubi to: