我试图获取" 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"); }
答案 0 :(得分:0)
为了更新weatherframe.Source,您必须在TextBlock的Text属性上订阅已更改的事件。更优雅的方法是将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"/>
在您的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;但是修剪工完了......: - )