[Windows Phone] Caliburn: User Control and Model Binding

在 Caliburn.Mico 中要設定 User Control 的 view model,有以下兩種方式:

<local:MyUserControl caliburn:Bind.Model="{Binding Model}"/>
<local:MyUserControl caliburn:Bind.Model="CaliburnDemoApp2.MyUserControlViewModel"/>

第一種是在 page 的 view model 裡,宣告一個屬性給 User Control,第二兩種是直接指定型別給 User Control。第一種的好處在於可以控制 User Control 的資料,第二種則是讓 page 裡的 view model 跟 User Control 切開關係。

而第一種方式,在產生 User Control 所需的 View Model 時,通常使用下列方法:

this.Model = IoC.Get<MyUserControlViewModel>();

但記得,透過 Ioc 取得物件時,必需事先註冊該型別。註冊型別時,可以用這樣自動化的方式進行:

Assembly assembly = this.GetType().GetTypeInfo().Assembly;
Type viewModelBaseType = typeof(ViewModelBase);
Type screenType = typeof(Screen);

//load ViewModel type that inherited ViewModelBase or Screen
var types = from modelType in assembly.GetExportedTypes()
            where modelType.GetTypeInfo().BaseType == viewModelBaseType ||
                  modelType.GetTypeInfo().BaseType == screenType
            select modelType;

foreach (var type in types)
{
    System.Diagnostics.Debug.WriteLine("Registerd ViewModel:{0}", type);
    _container.RegisterPerRequest(type, type.FullName, type);
}

有了這樣的觀念,相信在使用 User Control 時就不會有太大的挫折。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s