绑定文本 属性 of windows phone 8 app XAML 的简单算术运算
Simple Arithmetic Operations on Binded Text Property of windows phone 8 app XAML
我正在开发 Windows Phone 8.1 应用程序。在应用程序中,我正在解析 Json 数据。从解析的数据中,我填充了一个 GridView。 Json数据包含以开尔文为单位的温度。但是我想在绑定 TextBlock 中的数据时更改摄氏温度。
这是 XAML
中的代码
<StackPanel>
<TextBlock x:Name="tblk1" FontSize="20" />
<TextBlock x:Name="tblk2" FontSize="20" Margin="0,5,0,0"/>
<TextBlock x:Name="tblk3" FontSize="20" Margin="0,5,0,0"/>
<ScrollViewer VerticalScrollBarVisibility="Visible" VerticalScrollMode="Enabled" >
<GridView x:Name="tempList" ItemsSource="{Binding}">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="10" Background="DarkGreen">
<StackPanel Margin="5">
<TextBlock Text="{Binding dt}" FontSize="15" />
<TextBlock Text="{Binding temp.day}" FontSize="15" />
<TextBlock Text="{Binding temp.min}" FontSize="15" />
<TextBlock Text="{Binding temp.max}" FontSize="15" />
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</ScrollViewer>
</StackPanel>
这是来自 C# 的代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
RootObject obj = JsonConvert.DeserializeObject<RootObject>(MainPage.jsonReturn);
tblk1.Text = obj.city.name;
tblk2.Text = obj.cod;
tblk3.Text = obj.message.ToString();
tempList.DataContext = null;
tempList.DataContext = obj.list;
}
在输出中,这里的最低和最高温度以开尔文显示。我如何以摄氏度显示它?
PS There's no any way to change the Incoming JsonData in Celsius. It
has to changed in runtime.
为了回答您的具体问题,您似乎想使用带有绑定的转换器。例如:
class KelvinToCelsiusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (double)value - 273.15;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (double)value + 273.15;
}
}
(严格来说 ConvertBack()
方法可以保留未实现,即只是 throw new NotImplementedException();
,但使用上面的方法它也允许例如可编辑的 TextBox
绑定)。
然后您可以像这样使用上面的内容,例如:
<TextBlock Text="{Binding Path=temp.day, Converter={StaticResource kelvinToCelsiusConverter1}}" FontSize="15" />
...您当然在哪里声明了有问题的静态资源,例如:
<GridView.Resources>
<local:KelvinToCelsiusConverter x:Key="kelvinToCelsiusConverter1" />
</GridView.Resources>
(当然,我在这里假设您已经在 XAML 中声明为 local
的命名空间中声明了 KelvinToCelsiusConverter
class。缺少 a good, minimal, complete code example,不可能确定以上所有内容应该是什么样子,包括名称空间声明)。
我也同意评论者 IronSlug 提出的其他意见:
- 您应该对所有显示的数据使用绑定,而不仅仅是
GridView
控件中的模板化项目(即 tblk1
、tblk2
和 tblk3
,以及在代码隐藏中明确设置的任何其他控件)。
- 在分配一些不同的非空值之前将任何内容设置为
null
是没有意义的。
我正在开发 Windows Phone 8.1 应用程序。在应用程序中,我正在解析 Json 数据。从解析的数据中,我填充了一个 GridView。 Json数据包含以开尔文为单位的温度。但是我想在绑定 TextBlock 中的数据时更改摄氏温度。
这是 XAML
中的代码<StackPanel>
<TextBlock x:Name="tblk1" FontSize="20" />
<TextBlock x:Name="tblk2" FontSize="20" Margin="0,5,0,0"/>
<TextBlock x:Name="tblk3" FontSize="20" Margin="0,5,0,0"/>
<ScrollViewer VerticalScrollBarVisibility="Visible" VerticalScrollMode="Enabled" >
<GridView x:Name="tempList" ItemsSource="{Binding}">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="10" Background="DarkGreen">
<StackPanel Margin="5">
<TextBlock Text="{Binding dt}" FontSize="15" />
<TextBlock Text="{Binding temp.day}" FontSize="15" />
<TextBlock Text="{Binding temp.min}" FontSize="15" />
<TextBlock Text="{Binding temp.max}" FontSize="15" />
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</ScrollViewer>
</StackPanel>
这是来自 C# 的代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
RootObject obj = JsonConvert.DeserializeObject<RootObject>(MainPage.jsonReturn);
tblk1.Text = obj.city.name;
tblk2.Text = obj.cod;
tblk3.Text = obj.message.ToString();
tempList.DataContext = null;
tempList.DataContext = obj.list;
}
在输出中,这里的最低和最高温度以开尔文显示。我如何以摄氏度显示它?
PS There's no any way to change the Incoming JsonData in Celsius. It has to changed in runtime.
为了回答您的具体问题,您似乎想使用带有绑定的转换器。例如:
class KelvinToCelsiusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (double)value - 273.15;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (double)value + 273.15;
}
}
(严格来说 ConvertBack()
方法可以保留未实现,即只是 throw new NotImplementedException();
,但使用上面的方法它也允许例如可编辑的 TextBox
绑定)。
然后您可以像这样使用上面的内容,例如:
<TextBlock Text="{Binding Path=temp.day, Converter={StaticResource kelvinToCelsiusConverter1}}" FontSize="15" />
...您当然在哪里声明了有问题的静态资源,例如:
<GridView.Resources>
<local:KelvinToCelsiusConverter x:Key="kelvinToCelsiusConverter1" />
</GridView.Resources>
(当然,我在这里假设您已经在 XAML 中声明为 local
的命名空间中声明了 KelvinToCelsiusConverter
class。缺少 a good, minimal, complete code example,不可能确定以上所有内容应该是什么样子,包括名称空间声明)。
我也同意评论者 IronSlug 提出的其他意见:
- 您应该对所有显示的数据使用绑定,而不仅仅是
GridView
控件中的模板化项目(即tblk1
、tblk2
和tblk3
,以及在代码隐藏中明确设置的任何其他控件)。 - 在分配一些不同的非空值之前将任何内容设置为
null
是没有意义的。