Xamarin Master Detail 句柄泛型
Xamarin Master Detail handle generics
我已阅读 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>() );
以及处理列表视图上的点击事件的其他问题
public void ListView_ItemSelected( object sender, ItemTappedEventArgs e ) {
var item = e.Item as IMasterPageItem<?,?>;
[...]
}
有什么方法可以通过使用泛型来使用 MasterDetail 吗?
您可以通过使 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>;
我已阅读 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>() );
以及处理列表视图上的点击事件的其他问题
public void ListView_ItemSelected( object sender, ItemTappedEventArgs e ) {
var item = e.Item as IMasterPageItem<?,?>;
[...]
}
有什么方法可以通过使用泛型来使用 MasterDetail 吗?
您可以通过使 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>;