gpt4 book ai didi

c# - Xamarin Master Detail 句柄泛型

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:03 24 4
gpt4 key购买 nike

我已阅读 tutorial在 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; }
}

但是我在构建页面项目列表时遇到了问题

var masterPageItems = new List<IMasterPageItem<?,?>>();
masterPageItems.Add( new MasterPageItem<HomePage, HomePageViewModel>() );

以及处理listview点击事件的其他问题

public void ListView_ItemSelected( object sender, ItemTappedEventArgs e ) {
var item = e.Item as IMasterPageItem<?,?>;
[...]
}

有什么方法可以通过使用泛型来使用 MasterDetail 吗?

最佳答案

您可以通过使 TPageTViewModel 协变(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>;

关于c# - Xamarin Master Detail 句柄泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com