LemonteaのUnity部屋

C#とかのお話です~

Xamarin.Froms PrismでMVVM入門 Viewとバインディング

こんにちは。レモンティーです。

前回は、Prismでプロジェクトを作成しました。
www.sawalemontea.com

今回は、Viewについて見ていきます。

共有プロジェクトのViewsフォルダを開くと
MainPage.xamlがあるので開いてみます。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BlankApp1.Views.MainPage"
             Title="{Binding Title}">

    <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
        <Label Text="Welcome to Xamarin Forms and Prism!" />
    </StackLayout>

</ContentPage>

こんな感じになっています。
Prismでは、ViewとViewModelの紐付けは
ViewModelLocatorというのがやってくれるので
規則さえ守っていれば自分でやる必要はありません。

なので
Title="{Binding Title}"
のように、
簡単にViewModelのプロパティーをバインディングできます。

じゃあ規則ってなにかと言うと、場所と名前です。

・ViewはViewsフォルダに、ViewModelはViewModelsフォルダに作る。
・ViewModelの名前は、Viewの名前+ViewModelにする。
(ただし、Viewの名前が~Viewのときは、Viewの名前+Modelにする。)

などです。
ですがViewを追加するとこれに従ったViewModelも自動で追加されるので
あまり意識する必要はないです。
Prismすごいですね。



次に、自分で新しいViewを追加したい場合です。
Viewsフォルダを右クリックして
追加>新しい項目 を選択します。

すると、こんな画面がでます。
f:id:sawalemontea:20180430184726p:plain

Prism>Xamarin.Formsを選べば、好きなページが追加できます。

今回はContentPageを選択します。

すると、ContentPageとそのViewModelが自動で追加されます。

今回はViewの話なので追加したContentPageを見てみます。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="BlankApp1.Views.Page3">
  
</ContentPage>

概ねいつも通りですが、見慣れないコードが2行ほどありますね。

xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"

これはPrismのライブラリの参照をしています。

prism:ViewModelLocator.AutowireViewModel="True"

そしてこれが例のViewModelLocatorに
ViewModelとの紐付けをやってもらっている部分です。

なのでMainPageと同じく、ViewModelのプロパティを簡単にバインディングできます。

まあ自動ですのであまり意識する必要はなさそうですし
UIはいつも通り書くことができます。


今回はこれでおしまいです。
www.sawalemontea.com