如何在ListView ItemSelected上导航到其他类文件中的页面?

时间:2015-11-09 04:42:39

标签: c# listview xamarin

我坚持在我的应用中浏览网页。我是Xamarin Form的初学者。我正在做的是我有一个名为master.cs的主详情页面,默认情况下它导航到主页即内容页面。我在其他类页面中创建了列表视图,即ModelClasses.cs现在我想导航到其他内容页面,同时选择listview项目。我尝试了很多东西,但没有工作。 帮助我!!

母版

public class master : MasterDetailPage
    {
        public master ()
        {
            Label header = new Label {
                Text = "Master",
                Font = Font.BoldSystemFontOfSize (20)
            };
            MenuStacklayout _MenuStacklayout = new MenuStacklayout ();
            this.Master = new ContentPage{ 
                Title=header.Text,
                Content=_MenuStacklayout
            };

            this.Detail = new NavigationPage(new FTWHome());

            // For Windows Phone, provide a way to get back to the master page.
            if (Device.OS == TargetPlatform.WinPhone)
            {
                (this.Detail as ContentPage).Content.GestureRecognizers.Add(
                    new TapGestureRecognizer((view) =>
                        {
                            this.IsPresented = true;
                        }));
            }
        }
    }

ModelClasses

MenuStacklayout 创建菜单

    public class MenuStacklayout : StackLayout
        {
            String[] homelinks = { "HOME" };
            String[] healthlinks = { "I NEED HELP", "A MATE NEEDS HELP", "MOOD TRACKER", "HELPFUL ARTICLES" };
            String[] entertainmentlinks = { "PHOTO OF THE DAY", "MAGZINE CONTENTS", "FTW TEAM" };
            String[] aboutlinks = { "FTW PHILOSOPHY", "ABOUT FTW", "FTW STORE", "FTW SOCIAL" };
            String[] joinftwlinks = { "JOIN FTW" };
            String[] loginlinks = { "LOGIN" };

            #region Menu Layout
            public MenuStacklayout ()
            {
                ListView homelist = new ListView { 
                    ItemsSource = menuitems._menuitems (homelinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                homelist.RowHeight = 30;
                homelist.ItemSelected+= navigatePage_onSelected;
                StackLayout homeliststack = new StackLayout ();
                homeliststack.Children.Add (homelist);
                homelist.SeparatorVisibility = SeparatorVisibility.None;

                //homeliststack.Padding = new Thickness (2, 5, 0, 0);
                ListView healthlist = new ListView { 
                    //Header = "HEALTH",
                    ItemsSource = menuitems._menuitems (healthlinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                healthlist.RowHeight = 30;
                healthlist.ItemSelected+=navigatePage_onSelected;
                StackLayout healthliststack = new StackLayout ();
                healthliststack.Children.Add (healthlist);
                healthlist.SeparatorVisibility = SeparatorVisibility.None;

                ListView entertainmentlist = new ListView { 
                    //Header = "ENTERTAINMENT",
                    ItemsSource = menuitems._menuitems (entertainmentlinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                entertainmentlist.RowHeight = 30;
                entertainmentlist.ItemSelected+=navigatePage_onSelected;
                StackLayout entertainmentliststack = new StackLayout ();
                entertainmentliststack.Children.Add (entertainmentlist);
                entertainmentlist.SeparatorVisibility = SeparatorVisibility.None;

                ListView aboutlist = new ListView { 
                    //Header = "ABOUT",
                    ItemsSource = menuitems._menuitems (aboutlinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                aboutlist.RowHeight = 30;
                aboutlist.ItemSelected+=navigatePage_onSelected;
                StackLayout aboutliststack = new StackLayout ();
                aboutliststack.Children.Add (aboutlist);
                aboutlist.SeparatorVisibility = SeparatorVisibility.None;

                ListView joinftwlist = new ListView { 
                    ItemsSource = menuitems._menuitems (joinftwlinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                joinftwlist.RowHeight = 30;
                StackLayout joinftwliststack = new StackLayout ();
                joinftwliststack.Children.Add (joinftwlist);
                joinftwlist.SeparatorVisibility = SeparatorVisibility.None;

                ListView loginlist = new ListView { 
                    ItemsSource = menuitems._menuitems (loginlinks),
                    ItemTemplate = new DataTemplate (typeof(ftwMenuCell))
                };
                loginlist.RowHeight = 30;
                loginlist.SeparatorVisibility = SeparatorVisibility.None;
                loginlist.BackgroundColor = Color.Blue;
                StackLayout loginstack = new StackLayout ();
                loginstack.Children.Add (loginlist);


                this.Spacing = 1;
                this.BackgroundColor = Color.FromHex("#cccccc");
                this.Padding = new Thickness (0, 65, 0, 0);
                this.Orientation = StackOrientation.Vertical;
                this.VerticalOptions = LayoutOptions.StartAndExpand;
                this.Children.Add (homeliststack);
                this.Children.Add (healthliststack);
                this.Children.Add (entertainmentliststack);
                this.Children.Add (aboutliststack);
                this.Children.Add (joinftwlist);
                this.Children.Add (loginstack);
            }
        }

ItemTemplate For Menu

public class ftwMenuCell : ViewCell
    {
        public ftwMenuCell ()
        {
            var nameLabel = new Label () {
                FontFamily = "HelveticaNeue-Medium",
                FontSize = 14,
                FontAttributes=FontAttributes.Bold,
                TextColor = Color.Black,
                VerticalOptions=LayoutOptions.Center
            };
            nameLabel.SetBinding (Label.TextProperty, "_link");
            var cellLayout = new StackLayout {
                Spacing = 0,
                Padding = new Thickness (10, 0, 0, 0),
                VerticalOptions=LayoutOptions.FillAndExpand,
                Orientation = StackOrientation.Horizontal,
                Children = { nameLabel }
            };

            this.View = cellLayout;
        }

    }

    public class _menulink
    {
        public string _link{ get; set; }
    }

    public static class menuitems
    {
        public static List<_menulink> _menuitems (string[] linkid)
        {
            List<_menulink> menulinklist = new List<_menulink> ();
            foreach (var item in linkid) {
                _menulink menulink = new _menulink ();
                menulink._link = item;
                menulinklist.Add (menulink);
            }
            return menulinklist;
        }
    }

我有每个Listview项目的相应内容页面。 感谢提前!!

2 个答案:

答案 0 :(得分:0)

我无法看到您宣布 navigatePage_onSelected 的位置,但您可以尝试类似

的内容
void navigatePage_onSelected(object sender, SelectedItemChangedEventArgs e) {
    Navigation.PushModalAsync(new PageName());
}

请告诉我这是否适用于您:)

答案 1 :(得分:0)

我已经解决了!!

在我的navigatePage_onSelected事件处理程序中,该事件处理程序在MenuStacklayout类中声明,我将下面的代码放入其中并且它正在工作。

void navigatePage_onSelected(object sender, SelectedItemChangedEventArgs args){
            _menulink menuitem = (_menulink)args.SelectedItem;
            MasterDetailPage mstr = (MasterDetailPage)(Application.Current.MainPage); // My Application main page is a Masterpage so..
            if (menuitem._link == "ABOUT FTW") {
                mstr.Detail = new NavigationPage (new AboutFTW ());
            }else if(menuitem._link == "I NEED HELP"){
                mstr.Detail = new NavigationPage (new Entertainment ());
            }else if(menuitem._link == "HOME"){
                mstr.Detail = new NavigationPage (new FTWHome ());
            }
            // Show the detail page.
            mstr.IsPresented = false;
        }