我已阅读xamarin网站上的tutorial。
但是我想创建一个能够处理泛型的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上的click事件的其他问题
public void ListView_ItemSelected( object sender, ItemTappedEventArgs e ) {
var item = e.Item as IMasterPageItem<?,?>;
[...]
}
有没有办法可以使用泛型来使用MasterDetail?
答案 0 :(得分:3)
您可以通过同时使用TPage
和TViewModel
协变(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>;