【问题标题】:Xamarin forms: How to add a contentpage having arguments into a list?Xamarin 表单:如何将具有参数的内容页面添加到列表中?
【发布时间】:2019-06-04 07:59:49
【问题描述】:

我正在我的项目中实施Navigation Drawer。我正在关注blog 这个功能。

Mainpage.xsml.cs:

public partial class NavigationDrawerPage : MasterDetailPage
    {
public List<MasterPageItem> menuList { get; set; }
        public MainPage()
        {
            InitializeComponent();

            menuList = new List<MasterPageItem>();

            // Adding menu items to menuList and you can define title ,page and icon
            menuList.Add(new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType = typeof(HomePage) });
            menuList.Add(new MasterPageItem() { Title = "Setting", Icon = "setting.png", TargetType = typeof(SettingPage) });
            menuList.Add(new MasterPageItem() { Title = "LogOut", Icon = "logout.png", TargetType = typeof(LogoutPage) });

            navigationDrawerList.ItemsSource = menuList;

            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(HomePage)));
        }
}

Mainpage.xaml

<StackLayout Grid.Row="1" Spacing="15">
                    <ListView x:Name="navigationDrawerList"
                  RowHeight="60"
                  SeparatorVisibility="None"
                  BackgroundColor="#e8e8e8"
                  ItemSelected="OnMenuItemSelected">

                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell>
                                    <StackLayout>
                                        <!-- Main design for our menu items -->
                                        <StackLayout VerticalOptions="FillAndExpand"
                             Orientation="Horizontal"
                             Padding="20,10,0,10"
                             Spacing="20">

                                            <Image Source="{Binding Icon}"
                         WidthRequest="30"
                         HeightRequest="30"
                         VerticalOptions="Center" />

                                            <Label Text="{Binding Title}"
                         FontSize="Medium"
                         VerticalOptions="Center"
                         TextColor="Black"/>
                                        </StackLayout>
                                        <BoxView HeightRequest="1" BackgroundColor="Gray"/>
                                    </StackLayout>
                                </ViewCell>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </StackLayout>

MasterPageItem.cs

public class MasterPageItem
    {
        public string Title { get; set; }
        public string Icon { get; set; }
        public Type TargetType { get; set; }
    }

我的问题是在将我的内容页面添加到列表时。上面的代码完美运行:

menuList.Add(new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType = typeof(SettingPage) });

但是我有一个页面有一个参数,我不能在TargetType 内添加参数。见以下代码:

menuList.Add(new MasterPageItem() { Title = "Help", Icon = "help.png", TargetType = typeof(HelpPage(false)) });  //showing syntax errors for this line

如何将具有参数的内容页面添加到列表项中?我应该更改TargetType datatype 吗?

【问题讨论】:

  • 我假设您使用TargetType 来实例化详细信息页面。您可以将 Dictionary 添加到具有默认值的 MasterPageItem 并在创建 Detail 实例后传递它们
  • @shanranm 你能分享一个样本吗?

标签: xamarin.forms navigation-drawer master-detail


【解决方案1】:

您可以使用public static object CreateInstance(Type type, params object[] args)方法传递参数;

项目

public class MasterPageItem
{
    public string Title { get; set; }
    public string Icon { get; set; }
    public Type TargetType { get; set; }

    public object[] args { get; set; }   //
}

MasterDetailPage

menuList.Add(new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType = typeof(HomePage), args = new object[] {"string", 1 , false} } ); // pass parameters whatever you want

private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    var item = (MasterPageItem)e.SelectedItem;
    Type page = item.TargetType;
    Detail = new NavigationPage((Page)Activator.CreateInstance(page,item.args));   //this line
    IsPresented = false;
}

添加对应参数的构造函数

public HomePage()   //remain the default constructor 
{
    InitializeComponent();
}

public HomePage (string s , int i , bool b)   //add this
{
    InitializeComponent ();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多