Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据绑定的上下文中,如何将值从一个页面传递到另一个页面?_C#_Xaml_Windows Phone 8_Data Binding_Datacontext - Fatal编程技术网

C# 在数据绑定的上下文中,如何将值从一个页面传递到另一个页面?

C# 在数据绑定的上下文中,如何将值从一个页面传递到另一个页面?,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

我正在创建一个应用程序,其中有一个建筑物名称的数据模板列表,当点击“Thomas Gosnell Hall”时,它将进入一个新页面,文本块更改为所选建筑物名称“Thomas Gosnell Hall”的文本块。我知道数据绑定是用来做这件事的,但是我如何跨两个不同的页面来做呢

MainPage.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}"/>
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是一种将值从一个页面传递到下一个页面的好方法。