2016-11-28 38 views
1

我已閱讀xamarin網站上的tutorialXamarin Master詳細信息句柄仿製藥

但是,我想創建一個能夠處理泛型的主。爲此,我國實施MasterPageItem的是不同一點點

public interface IMasterPageItem<TPage, TViewModel> 
    where TPage : Xamarin.Forms.ContentPage 
    where TViewModel : ViewModel.BaseViewModel 
{ 
     TPage Page { get; } 

     TViewModel ViewModel { get; } 
} 


public class MasterPageItem<TPage, TViewModel> : IMasterPageItem<TPage, TViewModel> 
    where TPage : Xamarin.Forms.ContentPage 
    where TViewModel : ViewModel.BaseViewModel 
{ 
    public TPage Page { get; set; } 

    public TViewModel ViewModel { get; set; } 
} 

但是我有問題建立的頁面項目

var masterPageItems = new List<IMasterPageItem<?,?>>(); 
masterPageItems.Add(new MasterPageItem<HomePage, HomePageViewModel>()); 

以及其他問題的列表來處理的單擊事件listview

public void ListView_ItemSelected(object sender, ItemTappedEventArgs e) { 
    var item = e.Item as IMasterPageItem<?,?>; 
    [...] 
} 

有什麼辦法可以使用MasterDetail使用泛型?

回答

3

你可以改變你的接口了一下,有兩個工作TPageTViewModel協變(out修飾符):

public interface IMasterPageItem<out TPage, out TViewModel> 
    where TPage : Xamarin.Forms.ContentPage 
    where TViewModel : BaseViewModel { 

    TPage Page { get; } 
    TViewModel ViewModel { get; } 
} 

那你就能夠做到這一點:

var masterPageItems = new List<IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>>(); 
masterPageItems.Add(new MasterPageItem<HomePage, HomePageViewModel>()); 

而且這樣的:

var item = e.Item as IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>;