我有一个应用程序,我希望在每个详细信息页面都有一个包含2个选项和toolbarItems的母版页。
例如,这里我有一个设置页面作为我的详细信息页面,它有两个tollbaritems保存和取消。用户必须输入必须保存的用户数据的形式。所以点击保存toolbarItem我想保存数据并将用户重定向到其他页面(比如'PageA'),这不包括在主页列表选项中(Settins,Login)
我该怎么办呢?如果我await Navigation.PushAsync(new PageA());
我没有收到母版。我回到图标回到主要详细信息页面。但我想将用户重定向到一个页面,该页面也应该有masterdetails选项(设置和登录)。
我也在保存按钮点击中尝试了这个:
MasterDetailPage MDPage = new MasterDetailPage();
MDPage.Detail = new NavigationPage(new PageA());
MDPage.IsPresented = false;
提前致谢。
修改 这是我的代码:
MasterPage.cs
public ListView ListView { get { return listView; } }
ListView listView;
public MasterPage()
{
var masterPageItems = new List<MasterPageItem>();
masterPageItems.Add(new MasterPageItem
{
Title = "Settings",
//IconSource = "Settings.png",
TargetType = typeof(TestPage)
});
listView = new ListView
{
ItemsSource = masterPageItems,
ItemTemplate = new DataTemplate(() =>
{
var imageCell = new ImageCell();
imageCell.SetBinding(TextCell.TextProperty, "Title");
imageCell.SetBinding(ImageCell.ImageSourceProperty, "IconSource");
return imageCell;
}),
VerticalOptions = LayoutOptions.FillAndExpand,
SeparatorVisibility = SeparatorVisibility.None
};
Padding = new Thickness(0, 40, 0, 0);
// Icon = "hamburger.png";
Title = "Menu";
BackgroundColor = Color.FromHex("#4F6276");
Content = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
listView
}
};
}
MasterDetailsPage:
public class MainPage : MasterDetailPage
{
public MainPage()
{
MasterPage masterPage;
masterPage = new MasterPage();
Master = masterPage;
Detail = new NavigationPage(new TestPage())
{
//Tint = Color.Red // put your color here
BarBackgroundColor = Color.FromRgb(172, 183, 193),//Color.FromHex("#9E9E9E"),
BarTextColor = Color.Black,
BackgroundColor = Color.White
};
}
}
TestPage:
public class TestPage : ContentPage
{
public TestPage()
{
Button test = new Button();
test.Clicked += test_Clicked;
test.Text = "Save";
Button test1 = new Button();
test1.Clicked += test1_Clicked;
test1.Text = "cancel";
Content = new StackLayout
{
Children = {
test,
test1
}
};
}
void test_Clicked(object sender, EventArgs e)
{
//redirect to new page(Page1)
}
void test1_Clicked(object sender, EventArgs e)
{
//redirect to new page(Page2)
}
}
我想从onclick事件重定向到新页面说page1。我如何实现这一目标?
答案 0 :(得分:5)
保存设置后,您应该更改 exisiting MasterDetailPage实例的详细信息。
我认为最简单,最清晰的方法是使用MessagingCenter:
在设置页面中:
MessagingCenter.Send(new OpenMyPageMessage(), OpenMyPageMessage.Key);
您的主详情页面:
protected override void OnAppearing()
{
MessagingCenter.Subscribe<OpenMyPageMessage>(this, OpenMyPageMessage.Key, (sender) =>
{
Detail = new YourAnotherPage();
});
}
protected override void OnDisappearing()
{
MessagingCenter.Unsubscribe<OpenMyPageMessage>(this, OpenMyPageMessage.Key);
}
OpenMyPageMessage
只是一个简单的类:
public class OpenMyPageMessage
{
public static string Key = "OpenMyPageMessage";
}
答案 1 :(得分:0)
感谢 Nikolai Doronin的answer ,我开始工作了。我是这样做的:
MasterPage.cs
public ListView ListView { get { return listView; } }
ListView listView;
public MasterPage()
{
var masterPageItems = new List<MasterPageItem>();
masterPageItems.Add(new MasterPageItem
{
Title = "Settings",
//IconSource = "Settings.png",
TargetType = typeof(TestPage)
});
listView = new ListView
{
ItemsSource = masterPageItems,
ItemTemplate = new DataTemplate(() =>
{
var imageCell = new ImageCell();
imageCell.SetBinding(TextCell.TextProperty, "Title");
imageCell.SetBinding(ImageCell.ImageSourceProperty, "IconSource");
return imageCell;
}),
VerticalOptions = LayoutOptions.FillAndExpand,
SeparatorVisibility = SeparatorVisibility.None
};
Padding = new Thickness(0, 40, 0, 0);
// Icon = "hamburger.png";
Title = "Menu";
BackgroundColor = Color.FromHex("#4F6276");
Content = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
listView
}
};
}
MasterDetailsPage:
public class MainPage : MasterDetailPage
{
public MainPage()
{
MasterPage masterPage;
masterPage = new MasterPage();
Master = masterPage;
Detail = new NavigationPage(new TestPage())
{
//Tint = Color.Red // put your color here
BarBackgroundColor = Color.FromRgb(172, 183, 193),//Color.FromHex("#9E9E9E"),
BarTextColor = Color.Black,
BackgroundColor = Color.White
};
}
protected override void OnAppearing()
{
MessagingCenter.Subscribe<Class1.OpenMyPageMessage>(this, Class1.OpenMyPageMessage.Key, (sender) =>
{
Detail = new NavigationPage (Page1() };
});
MessagingCenter.Subscribe<Class1.OpenPage2>(this, Class1.OpenPage2.Key, (sender) =>
{
Detail = new NavigationPage( new Page2());
});
}
protected override void OnDisappearing()
{
MessagingCenter.Unsubscribe<Class1.OpenMyPageMessage>(this, Class1.OpenMyPageMessage.Key);
MessagingCenter.Unsubscribe<Class1.OpenPage2>(this, Class1.OpenPage2.Key);
}
}
TestPage:
public class TestPage : ContentPage
{
public TestPage()
{
Button test = new Button();
test.Clicked += test_Clicked;
test.Text = "Save";
Button test1 = new Button();
test1.Clicked += test1_Clicked;
test1.Text = "cancel";
Content = new StackLayout
{
Children = {
test,
test1
}
};
}
void test_Clicked(object sender, EventArgs e)
{
MessagingCenter.Send(new Class1.OpenPage2(), Class1.OpenPage2.Key);
}
void test1_Clicked(object sender, EventArgs e)
{
}
}
class.cs
public class Class1
{
public class OpenMyPageMessage
{
public static string Key = "OpenMyPageMessage";
}
public class OpenPage2
{
public static string Key = "OpenPage2";
}
}