绑定时访问TextBlock的值

时间:2012-02-09 17:37:01

标签: windows-phone-7 binding textblock

我正在为WP7开发应用程序,但我遇到了这个小问题:

<TextBlock Name="rName" 
           Text="{Binding LineOne2}" 
           TextWrapping="NoWrap" 
           Style="{StaticResource PhoneTextExtraLargeStyle}" />

我对TextblockLineOne2绑定,我设置了一个点击事件,以便在点击时启动另一个页面。 问题是,当我尝试获取该文本rName.Text的值时,它会显示其不可用。

所以我徘徊是否有任何可能的方法来获取TextBlock的值,将其用作另一页中方法的参数,即使它是绑定的?或者还有其他方法吗?

我的列表包含2个文本框和堆叠面板中的图像....我需要按下该文本框,打开一个新页面,其中包含该页面值中该文本框的值,并作为方法的参数。

编辑:

<ListBox ItemsSource="{Binding Items1}" 
         Margin="14,149,8,8" 
         Foreground="#FF7A0100" 
         Grid.RowSpan="2">
  <ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Name="featuredPanel" 
                  Orientation="Horizontal" 
                  Margin="0,0,0,17" 
                  Height="105" 
                  Width="432" 
                  Tap="featuredPanel_Tap">
                  <!--Replace rectangle with image-->
          <Image Height="100" 
                 Width="100" 
                 Source="{Binding ImagePath1}">
          </Image>
          <StackPanel Width="311">
            <TextBlock x:Name="rName" 
                       Text="{Binding LineOne1}" 
                       TextWrapping="NoWrap" 
                       Style="{StaticResource PhoneTextExtraLargeStyle}" />
            <TextBlock Text="{Binding LineTwo1}" 
                       TextWrapping="Wrap" 
                       Margin="12,-6,12,0" 
                       Style="{StaticResource PhoneTextSubtleStyle}" />
          </StackPanel>
        </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

此外,我正在绑定XML文件中的数据。

我需要使用TextBox“rName”来获取值并使用它在xml文件上执行linq查询以从该XML文件获取地址和电话号码并将它们绑定到另一页面中的文本框。

3 个答案:

答案 0 :(得分:3)

您无法按名称访问TextBlock的原因是因为它是ListBox的{​​{1}}的一部分。

考虑一下,ItemTemplate将包含与ListBox集合中的元素一样多的项目,因此如何指定您所指的Items1你是按姓名访问的吗?

有几种不同的方法可以解决这个问题。一种方法是将当前点击的项目保存在TextBlock处理程序中。将此行添加到处理程序:

featuredPanel_Tap

var currentItem = ((sender as StackPanel).DataContext) as MyItemType; MyItemType集合中包含的对象类型。然后,您可以Items1currentItem.LineOne1

访问该文字

另一种方法是为currentItem.LineTwo1的{​​{1}}或TwoWay属性创建ListBox绑定。当用户点击SelectedItem项时,绑定项将自动更新为SelectedIndex内的正确对象。

答案 1 :(得分:1)

如果您有约束力,不应直接访问TextBlock。但是,如果您愿意,可以执行以下操作:

XAML

<TextBlock x:Name="rName" Text="{Binding LineOne2, Mode=TwoWay}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />

代码隐藏

string text = rName.Text;
string text = LineOne2;

任何一种方式都应该有效,但你应该直接访问LineOne2

答案 2 :(得分:0)

有两种方法可以做到这一点。一个是你使用全局变量。基本上,您在app.xaml.cs文件中声明了一个公共变量,现在您可以在任何页面上访问它。第二种方法是将其作为页面uri中的参数传递。

App Hub上查看此页面以获取更多信息。

更新:如果您需要访问文本块的值,还有两种方法可以执行此操作。将全局变量或参数设置为等于视图模型中绑定的属性,或者使用后面的代码将其设置为文本块的Text属性。