Доступ к значению TextBlock, когда он связан - PullRequest
1 голос
/ 09 февраля 2012

Я работаю над приложением для WP7, но у меня есть небольшая проблема:

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

У меня есть Textblock привязка к LineOne2, я настроил событие нажатия, чтобы запустить другую страницу, когда она будет нажата. Проблема в том, что когда я пытаюсь получить значение этого текста 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", чтобы получить значение, и использовать его, чтобы выполнить запрос linq к файлу xml, чтобы получить адреса и телефонные номера из этого файла XML и связать их с текстовыми полями на другой странице.

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Причина, по которой вы не можете получить доступ к TextBlock по имени, заключается в том, что он является частью ListBox ItemTemplate.

Подумайте об этом, ListBox будет иметь столько же элементов, сколько и элементов в коллекции Items1, так как вы можете указать, на какой TextBlock вы ссылаетесь, если выполучить доступ к нему по имени?

Есть несколько способов решить эту проблему.Одним из способов является сохранение текущего элемента в обработчике featuredPanel_Tap.Добавьте эту строку в обработчик:

var currentItem = ((sender as StackPanel).DataContext) as MyItemType;

MyItemType - это тип объекта, который содержится в коллекции Items1.Затем вы можете получить доступ к тексту как currentItem.LineOne1 или currentItem.LineTwo1.

Другой способ - создать привязку TwoWay для свойства ListBox * SelectedItem или SelectedIndexСвязанный элемент будет автоматически обновлен до нужного объекта в Items1, когда пользователь нажмет на элемент ListBox.

1 голос
/ 09 февраля 2012

Если вы связываете, вы не должны получать прямой доступ к TextBlock.Однако, если вы хотите, вы можете сделать следующее:

XAML

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

CodeBehind

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

в любом случае должно работать, но вы должны просто получить прямой доступ к LineOne2

0 голосов
/ 09 февраля 2012

Есть 2 способа сделать это. Во-первых, вы используете глобальную переменную. По сути, вы объявляете открытую переменную внутри файла app.xaml.cs, и теперь у вас есть доступ к ней на любой странице. Второй способ - передать его в качестве параметра в URI страницы.

Проверьте эту страницу на App Hub для получения дополнительной информации.

Обновление: Если вам нужен доступ к значению текстового блока, есть также два способа сделать это. Либо установите глобальную переменную или параметр, равные свойству, к которому привязывается ваша модель представления, либо, если вы используете код позади, просто установите для него свойство Text текстового блока.

...