作成日: 2017/05/14, 更新日: 2017/05/14
ViewModelLocator2
- モジュールを学習したので、ちょっと戻って ViewModelLocator のカスタム設定をここでは学習します。 以前は自動インジェクション任せで ViewModel をバインドしていましたが、個別設定もすることができます。
- 以下では、同じアセンブリ内にあり、ViewModels フォルダ内で管理しているけど、 View 名に対応したクラス名ではない ViewModel クラスをインジェクションする方法です。
- それではサンプルを見てみましょう。 個別設定は、ブートストラッパー内で、ConfigureViewModelLocator メソッドに書いていきます。
- 書き方その1
スポンサーリンク
' View の型、ViewModel の型
ViewModelLocationProvider.Register(GetType(Window1).ToString(), GetType(CustomViewModel))
' View の型、ファクトリーメソッド(インスタンス生成したデータを登録) ViewModelLocationProvider.Register(GetType(Window1).ToString(), Function() Me.Container.Resolve(Of CustomViewModel)())
' ジェネリック形式の View の型、ファクトリーメソッド(インスタンス生成したデータを登録) ViewModelLocationProvider.Register(Of Window1)(Function() Me.Container.Resolve(Of CustomViewModel)())
' ジェネリック形式の View の型、ジェネリック形式の ViewModel の型
ViewModelLocationProvider.Register(Of Window1, CustomViewModel)()
Namespace ViewModels Public Class CustomViewModel Public Property Title As String = "Prism Unity Application" End Class End Namespace
<Window x:Class="Views.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication1.Views" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" mc:Ignorable="d" Title="{Binding Title}" Height="350" Width="525"> <Grid> <TextBlock Text="{Binding Title}" FontSize="40" /> </Grid> </Window>
Imports Microsoft.Practices.Unity Imports Prism.Unity Imports Prism.Mvvm Imports WpfApplication1.Views Imports WpfApplication1.ViewModels Public Class Bootstrapper Inherits UnityBootstrapper ' Shell 担当になる View のインスタンスを返却 Protected Overrides Function CreateShell() As DependencyObject Return Me.Container.Resolve(Of Window1) End Function ' Shell 担当になる View を表示 Protected Overrides Sub InitializeShell() Application.Current.MainWindow.Show() End Sub ' ViewModelLocator の VM 探し(名前空間解決)方法をカスタマイズ Protected Overrides Sub ConfigureViewModelLocator() MyBase.ConfigureViewModelLocator() ' 同じアセンブリ内にあり ViewModels フォルダ内で管理しているが、View 名とは別の ViewModel を割り当てたい時 '' Type, Type 形式の登録方法 'ViewModelLocationProvider.Register(GetType(Window1).ToString(), GetType(CustomViewModel)) '' Type, Factory(インスタンス生成したものを登録)形式の登録方法 'ViewModelLocationProvider.Register(GetType(Window1).ToString(), Function() Me.Container.Resolve(Of CustomViewModel)()) '' Generic Type, Factory(インスタンス生成したものを登録) 形式の登録方法 'ViewModelLocationProvider.Register(Of Window1)(Function() Me.Container.Resolve(Of CustomViewModel)()) ' Generic Type, Generic Type ViewModelLocationProvider.Register(Of Window1, CustomViewModel)() End Sub End Class
Class Application ' Startup、Exit、DispatcherUnhandledException などのアプリケーション レベルのイベントは、 ' このファイルで処理できます。 Protected Overrides Sub OnStartup(e As StartupEventArgs) MyBase.OnStartup(e) ' Unity 管理による Prism アプリケーションの起動制御処理を実行 Dim boot = New Bootstrapper boot.Run() End Sub End Class
-
前(Module4)に戻る 目次に戻る 次(ViewModelLocator2)に進む
スポンサーリンク