2012-03-01 24 views
0

我試圖獲取由「條件」返回的值,因此idee在if語句中使用文本塊名稱,因此我可以更改圖像的來源。無法訪問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"); }       
+0

這裏是一個挑戰 - [編輯]您問題並修復你的代碼/ xaml格式。獲得這一權利將確保你在將來得到很好的答案。 – Will 2012-03-01 19:37:55

回答

0

爲了要更新您的weatherframe.Source,你將不得不訂閱上的Text屬性更改事件您TextBlock的。更好的方法是將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> 
+0

Thanx爲你的幫助..但我不明白..你能讓我舉一個例子..我仍然是一個初學者.. – 2012-03-01 17:50:53

+0

@youngblade好吧,我剛剛做到了。 – 2012-03-01 17:59:20

+0

Thanx再次爲您的答覆..但我遇到了一些其他猜測 – 2012-03-01 18:42:43

0

我知道了解決:

我把文本塊的「加載事件handeler」

<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源碼。和suposibly存在其中 使得它不可能爲hulpBlock.Text等於「晴間多雲」,但微調做的工作文字一些額外的隱藏數據.. :-)