我想点击一个按钮将我带到一个页面 ,然后单击列表框项,单击新页面上的按钮并将其传递回页面,而不创建第一页的新URI。
**First Page**
private void btnAddExistingMember_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/ChooseMember.xaml", UriKind.Relative));
}
**Second page after choosing listbox value**
private void btnAddSelected_Click(object sender, RoutedEventArgs e)
{
Member currMember = (Member)lstMembers.SelectedItem;
string memberID = currMember.ID.ToString();
//navigate back to first page here passing memberID
}
可以吗?
谢谢
答案 0 :(得分:3)
您可以将该成员存储在App.xaml.cs文件中。这是应用程序中所有文件的常用文件。 这就像一个全局变量。
//App.xaml.cs
int datafield ;
//Page1xaml.cs
(App.Current as App).dataField =10;
//Page2.xaml.cs
int x = (App.Current as App).dataField
答案 1 :(得分:2)
您可以创建一个包含成员ID的经理类。然后可以从第一页和ChooseMember页面访问此经理类。
Singleton Manager类的示例: -
public class MyManager
{
private static MyManager _instance;
public static MyManager Instance
{
get
{
if (_instance == null)
{
_instance = new MyManager();
}
return _instance;
}
}
}
答案 2 :(得分:2)
我在codeproject找到了一个对我非常有用的解决方案。
从第二种表单移动时,请将数据保存在PhoneApplicationService.Current.State
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
// Called when a page becomes the active page in a frame
base.OnNavigatedFrom(e);
// Text is param, you can define anything instead of Text
// but remember you need to further use same param.
PhoneApplicationService.Current.State["Text"] = txtboxvalue.Text;
}
使用相同的NavigationService.GoBack();
和OnNavigatedTo
方法返回,获取以下代码。
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (PhoneApplicationService.Current.State.ContainsKey("Text"))
txtvalue.Text = (string)PhoneApplicationService.Current.State["Text"];
}
参考文献:
答案 3 :(得分:1)
听起来我想要将某个对象设置为另一个页面的上下文。 MVVM Light中的消息听起来像是一个很好的解决方案。看起来您不是在使用MVVM,因此可能无法立即应用。 This post几乎列出了我在这里所说的内容。
第二页
创建SelectedObject属性并确保调用
RaisePropertyChanged(SelectedObjectPropertyName, oldValue, value, true);
最后一个参数true
表示将此值的更改广播给任何正在收听的人。你需要为列表框选择的项目和按钮点击等连接一些其他命令,但我不会在这里进入,因为它与你的问题没有直接关系。选择列表框项将只是为您想要完成的第一页设置数据项。点击按钮可以处理导航。
第一页
在您的视图模型构造函数中,注册以接收从第二页广播的更改
Messenger.Default.Register<PropertyChangedMessage<MyObject>>(this, (action) => UpdateObject(action.NewValue));
然后定义UpdateObject
private void UpdateObject(MyObject newObject)
{
LocalObjectProperty = newObject;
}
答案 4 :(得分:1)
您只需使用
即可//first page
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
string value = string.Empty;
IDictionary<string, string> queryString = this.NavigationContext.QueryString;
if (queryString.ContainsKey("memberID"))
{
memberID = queryString["memberID"];
if (memberID != "-1")
//your code here
}
base.OnNavigatedTo(e);
}
//second page
private void btnAddSelected_Click(object sender, RoutedEventArgs e)
{
Member currMember = (Member)lstMembers.SelectedItem;
string memberID = currMember.ID.ToString();
string target = "/FirstPage.xaml";
target += string.Format("?memberID={0}", memberID);
NavigationService.Navigate(new Uri(target, UriKind.Relative));
}