Reputation: 29427
I have read the tutorial on the xamarin web site.
However I would like to create a Master which is able to handle generics. For this reason my implementation of MasterPageItem is a little bit different
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; }
}
However I am having problems to build the List of page items
var masterPageItems = new List<IMasterPageItem<?,?>>();
masterPageItems.Add( new MasterPageItem<HomePage, HomePageViewModel>() );
as well as other problems to handle the click event on the listview
public void ListView_ItemSelected( object sender, ItemTappedEventArgs e ) {
var item = e.Item as IMasterPageItem<?,?>;
[...]
}
Is there any way I can use MasterDetail by using generics?
Upvotes: 1
Views: 55
Reputation: 101543
You can change your interface a bit, by making both TPage
and TViewModel
covariant (out modifier):
public interface IMasterPageItem<out TPage, out TViewModel>
where TPage : Xamarin.Forms.ContentPage
where TViewModel : BaseViewModel {
TPage Page { get; }
TViewModel ViewModel { get; }
}
Then you are able to do this:
var masterPageItems = new List<IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>>();
masterPageItems.Add(new MasterPageItem<HomePage, HomePageViewModel>());
And this:
var item = e.Item as IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>;
Upvotes: 3