2016-11-28 10 views
1

私はxamarinのWebサイトでtutorialを読んでいます。Xamarin 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>()); 

をだけでなく、他の問題のリストを構築するために問題を抱えていますがリストビュー

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

ジェネリックスを使用してMasterDetailを使用する方法はありますか?

答えて

3

あなたは(モディファイ外)の両方TPageTViewModel共変を行うことによって、あなたのインターフェイスビットを変更することができます。

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

そして、この:

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

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

は、その後、あなたがこれを行うことができます

var item = e.Item as IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>; 
関連する問題