加入到這一點,從通用基類繼承的時候,我們沒有也遇到基於XAML平臺的一些問題 - 儘管這些主要是解決(如XamlParseException when I inherit a Page from a Generic base class)
(旁白 - 允許一些向後兼容性, WindowsPhone的系統仍然有一些有限的通用視圖的支持,但這種被標記爲Obsolete
,我很遺憾讓這住上...)
的好消息是,在我的經驗,主要視圖的不需要知道它們的ViewModel類型 - 相反,大多數視圖可以用「純綁定」構建而不需要聲明類型化的ViewModel。
對於那些確實需要知道他們的視圖模型類型的剩餘次數,那麼一個簡單的添加的屬性迅速增加了這一點 - 比如:
protected MyViewModel MyViewModel
{
get { return (MyViewModel)base.ViewModel; }
/* set is optional - not typically needed
set { base.ViewModel = value; }
*/
}
另外,如果你想你大概可以寫這種擴展方法 - 例如是這樣的:
public static TViewModel TypedViewModel<TViewModel>(this IMvxView view) where TViewModel : class, IMvxViewModel
{
return view.ViewModel as TViewModel;
}
很或者....
....如果你不害怕鬼,小妖精或Heizenbugs
....
一種方式來添加的您所有視圖的TypedViewModel
屬性將會將泛型添加回您的視圖層次結構中 - 這對您來說很容易實現 - 例如在Android中增加
public class BaseActivity<TViewModel> : MvxActivity
where TViewModel : class, IMvxViewModel
{
protected TViewModel TypedViewModel
{
get { return (TViewModel)base.ViewModel; }
/* set is optional - not typically needed
set { base.ViewModel = value; }
*/
}
}
這應該做工精細你...但如果你撞了Heizenbug,那麼我不認爲任何人都可以幫助你。Xamarin在推薦這種模式時非常明確 - 特別是在基於objC的平臺上。
我很欣賞我往往先回答MvvmCross問題,但請短語的問題給大家不只是爲「你」了:)參閱「使有關」在http://stackoverflow.com /問題/如何對問。謝謝:) – Stuart