C# Xamarin主细节句柄泛型
我在xamarin的网站上读到了这篇文章 然而,我想创建一个能够处理泛型的Master。因此,我对MasterPageItem的实现有点不同C# Xamarin主细节句柄泛型,c#,generics,xamarin,xamarin.forms,generic-list,C#,Generics,Xamarin,Xamarin.forms,Generic List,我在xamarin的网站上读到了这篇文章 然而,我想创建一个能够处理泛型的Master。因此,我对MasterPageItem的实现有点不同 public interface IMasterPageItem<TPage, TViewModel> where TPage : Xamarin.Forms.ContentPage where TViewModel : ViewModel.BaseViewModel { TPage Page { get; }
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; }
}
公共接口IMasterPageItem
其中TPage:Xamarin.Forms.ContentPage
其中TViewModel:ViewModel.BaseViewModel
{
t页面页面{get;}
TViewModel ViewModel{get;}
}
公共类MasterPageItem:IMasterPageItem
其中TPage:Xamarin.Forms.ContentPage
其中TViewModel:ViewModel.BaseViewModel
{
公共TPage页面{get;set;}
公共TViewModel视图模型{get;set;}
}
但是,我在构建页面项目列表时遇到问题
var masterPageItems = new List<IMasterPageItem<?,?>>();
masterPageItems.Add( new MasterPageItem<HomePage, HomePageViewModel>() );
var masterPageItems=新列表;
[...]
}
有什么方法可以通过使用泛型来使用MasterDetail吗?您可以通过使
TPage
和TViewModel
协变(out修饰符)来稍微更改您的界面:
公共接口IMasterPageItem
其中TPage:Xamarin.Forms.ContentPage
其中TViewModel:BaseViewModel{
t页面页面{get;}
TViewModel ViewModel{get;}
}
然后,您可以执行以下操作:
var masterPageItems = new List<IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>>();
masterPageItems.Add(new MasterPageItem<HomePage, HomePageViewModel>());
var masterPageItems=new List();
添加(新的MasterPageItem());
这是:
var item = e.Item as IMasterPageItem<Xamarin.Forms.ContentPage, BaseViewModel>;
var item=e.项作为IMasterPageItem;
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>;