Обновить содержимое текстового поля, которое привязано к источнику данных, в зависимости от значения, которое вводится в текстовое поле источником данных

#c# #visual-studio #silverlight #windows-phone-7 #if-statement

#c# #visual-студия #silverlight #windows-phone-7 #if

Вопрос:

У меня есть текстовое поле, которое привязано к службе данных, чтобы получить его содержимое. На данный момент служба передачи данных помещает число от 1 до 9 в это текстовое поле. Что мне нужно сделать, это на основе этого значения заменить содержимое этого текстового поля строкой. Так, например, если исходное содержимое текстового поля было «1», вместо этого оно было бы заменено на «1 — Пример текста здесь»

Ниже приведен код, в котором определено текстовое поле.

 <StackPanel Margin="0,0,0,17" Width="432">
    <TextBlock Text="{Binding Category1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/>
    <TextBlock Text="{Binding Category2}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/>
    <TextBlock Text="{Binding Category3}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/>
</StackPanel>
  

Я подумал, что, возможно, я бы использовал оператор else if, но я не знаю, как ссылаться на textblock из этого оператора if.

Спасибо за вашу помощь

Ответ №1:

Вам нужно назвать текстовый блок, чтобы на него можно было ссылаться в коде, поэтому будет работать что-то вроде приведенного ниже кода

  <TextBlock x:Name="tb1" Text="{Binding Category1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/>

if (tb1.Text == "something")
        {
            DoSomething();
        }
        else
        {
            DoSomethingElse();
        }
  

Комментарии:

1. Ах, хорошо, теперь я вижу, в чем моя проблема, я пытался это сделать, но имеет ли значение, что мой текстовый блок находится в окне списка, поскольку он сообщает мне, что «имя «tbl1» не существует в текущем контексте

Ответ №2:

Вы можете определить преобразователь значений. Например:

 public class IntToTextConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        // Do the conversion from int to Text
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        // Do the conversion from Text to int
    }
}

<Window x:Class="MyNamespace.Window1"
    ...
    xmlns:my="clr-namespace:MyNamespace"
    ...>
    <Window.Resources>
        <my:IntToTextConverter x:Key="converter" />
    </Window.Resources>
    <Grid>
        <TextBox Text={Binding Category1, Converter={StaticResource converter}}/>
    </Grid>
</Window>
  

Здесь есть хорошая статья о преобразователях значений