绑定文本 属性 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 控件中的模板化项目(即 tblk1tblk2tblk3 ,以及在代码隐藏中明确设置的任何其他控件)。
  • 在分配一些不同的非空值之前将任何内容设置为 null 是没有意义的。