无法访问DataTemplate中的文本块名称

时间:2012-03-01 17:41:17

标签: c# windows-phone-7

我试图获取" condition"返回的值。所以idee是在if语句中使用textblocks名称,这样我就可以改变图像的来源。

当我尝试使用datatemplate之外的文本块时,所有这些都很顺利。 但是只要我在datatemplate中选择一个文本块,我就会收到错误消息,说明文本块不存在。我需要这样做,因为当天气变化时,我需要另外一张图片。

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 :(得分:0)

为了更新weatherframe.Source,您必须在TextBlock的Text属性上订阅已更改的事件。更优雅的方法是将weatherframe.Source实现为依赖属性(如果尚未实现),那么您可以将conditionweatherframe.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"/>

在您的GUI中:

 <Weatherframe Source="{Binding Path=condition, Converter={StaticResource StringToImageConverter}}" Name="weatherframe"></Weatherframe>

答案 1 :(得分:0)

我得到了解决:

我给文本块添加了一个&#34;加载的事件handeler&#34;

    <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不可能等于&#34;部分多云&#34;但是修剪工完了......: - )