Не удается получить доступ к имени текстового блока внутри DataTemplate - PullRequest
0 голосов
/ 01 марта 2012

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

при попыткечтобы сделать это с текстовым блоком, который находится вне таблицы данных, все идет хорошо ... но как только я выбираю текстовый блок, который находится внутри таблицы данных, я получаю сообщение об ошибке о том, что текстовый блок не существует.Мне нужно сделать это, потому что, когда погода меняется, мне нужно другое изображение, чтобы пойти с ним.

xaml:

                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Height="99" >
                                    <Grid Height="100">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="100"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>                                            
                                         <TextBlock Text="{Binding Path=condition}" Grid.Column="1" Margin="10,75,10,0" Name="hulpBlock"></TextBlock>
                                    </Grid>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>

xaml.cs:

    if (hulpBlock.Text == "Partly Cloudy")
         { weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("WeatherIcons/03.png"); }                        

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Я получил решение:

Я дал текстовому блоку «загруженный обработчик событий»

    <TextBlock Loaded="test_Loaded" Text="{Binding Path=condition}"  Grid.Column="1" Margin="10,75,10,0" x:Name="temp" ></TextBlock>

И сделал это в моем xaml.cs:

    private void test_Loaded(object sender, RoutedEventArgs e)
    {
        var hulpBlock = sender as TextBlock;
        if (hulpBlock.Text.Trim().Equals("Partly Cloudy"))
        {
            Weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("WeatherIcons/03.png");
        }
    }

мои данные извлекаются из интернет-источника xml. и, возможно, есть некоторые дополнительные скрытые данные в тексте, которые делает невозможным для hulpBlock.Text равный «Небольшая облачность», но триммер сделал свою работу ..

0 голосов
/ 01 марта 2012

Для обновления вашего Weatherframe.Source вам необходимо подписаться на измененное событие в Text Text вашего TextBlock.Более элегантный способ сделать это - реализовать weatherframe.Source как свойство зависимости, если его еще нет, тогда вы можете просто связать condition с weatherframe.Source с соответствующим Value Converter напрямую.

Ваш ValueConverter должен выглядеть примерно так:

public class StringToImageConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if(value == DependencyProperty.UnsetValue || !(value is string))
        {
            return null; //Handle error your way here
        }
        if ((string)value == "Partly Cloudy")
        {
            return new ImageSourceConverter().ConvertFromString("WeatherIcons/03.png");
        }
        else
        {
           // More Implementations and error handling etc
        }
        return null;
    }


    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }

    #endregion
}

Тогда в вашем XAML:

В разделе ресурсов:

<StringToImageConverter x:Key="StringToImageConverter"/>

В вашем графическом интерфейсе:

 <Weatherframe Source="{Binding Path=condition, Converter={StaticResource StringToImageConverter}}" Name="weatherframe"></Weatherframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...