Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin主细节句柄泛型_C#_Generics_Xamarin_Xamarin.forms_Generic List - Fatal编程技术网

C# Xamarin主细节句柄泛型

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; }

我在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; }
}
公共接口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>;