C# 在数据绑定的上下文中,如何将值从一个页面传递到另一个页面?
我正在创建一个应用程序,其中有一个建筑物名称的数据模板列表,当点击“Thomas Gosnell Hall”时,它将进入一个新页面,文本块更改为所选建筑物名称“Thomas Gosnell Hall”的文本块。我知道数据绑定是用来做这件事的,但是我如何跨两个不同的页面来做呢 MainPage.xamlC# 在数据绑定的上下文中,如何将值从一个页面传递到另一个页面?,c#,xaml,windows-phone-8,data-binding,datacontext,C#,Xaml,Windows Phone 8,Data Binding,Datacontext,我正在创建一个应用程序,其中有一个建筑物名称的数据模板列表,当点击“Thomas Gosnell Hall”时,它将进入一个新页面,文本块更改为所选建筑物名称“Thomas Gosnell Hall”的文本块。我知道数据绑定是用来做这件事的,但是我如何跨两个不同的页面来做呢 MainPage.xaml <TextBlock Tap="TextBlock_Tap" Text="{Binding LineOne}" TextWrapping="NoWrap" Style="{StaticRes
<TextBlock Tap="TextBlock_Tap" Text="{Binding LineOne}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock x:Name="buildingName" Text="Building Name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
MapLocation.xaml
<TextBlock Tap="TextBlock_Tap" Text="{Binding LineOne}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock x:Name="buildingName" Text="Building Name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
问题出在这一行
bldg.BuildingName=building
正如它所说,名称构建在当前上下文中不存在。
它存在于MainPage.xaml.cs中,但不存在于mapplocation.xaml.cs中。如何根据用户的建筑选择将建筑名称绑定到下一页?一个选项是将主页上的选定值作为公共属性公开。然后其他页面可以读取设置的任何值
另一个选项是在导航方法中将其作为状态传递:
NavigationService.Navigate(new Uri("/MapLocation.xaml", UriKind.Relative), building);
请参见此处:我建议通过
Uri
参数将字符串值传递到目标页面:
public void TextBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var building = ((TextBlock)sender).Text;
NavigationService.Navigate(new Uri("/MapLocation.xaml?building=" + building, UriKind.Relative));
}
然后在目标页面中处理加载正确信息的操作,例如在页面Loaded
事件处理程序中:
public MapLocation_Loaded()
{
string building;
if(NavigationContext.QueryString.TryGetValue("building", out building))
{
//load information based on building parameter value
}
}
我将
TextBlock\u Tap
属性从private void
更改为public void
,但MapLocation类无法识别var building
。不是TextBlock\u Tap。。这是一种方法,不是变量。你想公开你的发件人控件中的用户选择。我不确定我是否理解你的意思。我应该把公共财产放在哪里?我试着把它放在主页上的几个地方,但在你的代码中抱怨说当前上下文中不存在sender
。很抱歉,我误读了它的来源。只需使用第二种方法(导航参数),我从来没有这样想过,很有趣!Navigate参数给出了一个错误无重载方法“Navigate”包含两个参数。
我在这里遗漏了什么吗?谢谢!但是并没有把MapLocation类放下来。我更新了上面的MapLocation.xaml.cs。这是正确的格式吗?是的,看起来不错。您是否传递了Uri参数:。/MapLocation.xaml?building=…
?是的,我从主页上传递了!很抱歉问了这么多问题,但我在加载的MapLocation\u
的if语句中添加了这行代码,building=buildingName.Text代码>文本块仍然没有更改:/buildingName
是MapLocation.xaml中textblock的名称吗?如果是这样,请尝试:buildingName.Text=building代码>终于拿到了,非常感谢!所以NavigationService是一种将值从一个页面传递到下一个页面的好方法。